2021-11-2-访问所有节点的最短路径
访问所有节点的最短路径
存在一个由 n 个节点组成的无向连通图,图中的节点按从 0 到 n - 1 编号。
给你一个数组 graph 表示这个图。其中,graph[i] 是一个列表,由所有与节点 i 直接相连的节点组成。
返回能够访问所有节点的最短路径的长度。你可以在任一节点开始和停止,也可以多次重访节点,并且可以重用边。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/shortest-path-visiting-all-nodes 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
要点,广度
点,当前已visit 节点的次数。
def f(graph):
n = len(graph)
queue = [(i, 1<<i, 0) for i in range(n)]
seen = set([(i, 1<<i) for i in range(n)])
while queue:
num, mask, dst = queue.pop(0)
if mask == (1 << n) - 1:
return dst
for i in graph[num]:
newmask = mask|(1<<i)
if (i, newmask) in seen:
continue
seen.add((i, newmask))
queue.append((i, newmask, dst+1))
return 0