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




Loading Disqus comments...
Table of Contents