此时物理链接情况为 c -> g -> f ,但文字为 c -> f -> g
如果用组合”cfg“,显然 c 不在 dict[f] 中
所以必须用全排列满足这部分情况
如果用了组合算,结果是40,比正答少了一半
import os
import sys
import itertools
# 请在此输入您的代码
# 表示相邻元素
dict = {'a': ['f', 'b'], 'b': ['a', 'c', 'g'], 'c': ['b', 'd', 'g'],
'd': ['e', 'c'], 'e': ['d', 'f', 'g'], 'f': ['a', 'e', 'g'],
'g': ['b', 'c', 'e', 'f']}
s = 'abcdefg'
ans = []
cnt = 0
# 先找出全排列 在去全排列里筛选
for i in range(1, 8):
for x in itertools.combinations(s, i):
ans.append("".join(x))
print(ans)
print(len(ans))
for str1 in ans:# 每一种组合
# 点亮一个的情况
if len(str1) == 1:
cnt += 1
continue
#由于"c"没有在dic["f"]中,所以就会遗落"cfg"这种情况
# for c in range(1, len(str1)): # 组合内遍历是否满足条件
# if str1[c - 1] not in dict[str1[c]]:
# flag = 0
# break
#
# else:
# cnt += 1
# print(str1)
for str1 in ans:
if len(str1) == 1:
cnt += 1
continue
for situation in itertools.permutations(str1):
for c in range(1, len(situation)):
if situation[c - 1] not in dict[situation[c]]:
break
else:
cnt += 1
break
print(cnt)