这两对点连得通吗
问两件事:0 号和 5 号连不连通?1 号和 3 号呢?运行下面这段程序: def blocks(g): seen = set() out = [] for s in sorted(g): if s
数出有几块
补全 blocks:对每个还没走过的点起一次遍历,把这一块的成员收集起来。输出一共有几块。
把每块的成员都列出来
用同一个 blocks,把每一块的成员列出来:块内用 - 连,块与块之间用 / 隔开。
⚠️ 遍历数块和并查集数块,必须一样
写两个版本:一个用遍历数块,一个用并查集数块。 输出三样:遍历数出几块 / 并查集数出几块 / 是否相同(相同输出 结果一致,否则 结果不一致)。
BFS 为什么能给出最短步数
无权图上 BFS 求出的步数一定最短,因为【0】。
DFS 能不能直接给最短步数
用 DFS 求最短步数【0】。
怎么把最短路径也还原出来
BFS 除了步数还想要具体路径,办法是【0】。
从 0 到各点各要几步
七个点,走不到的记成 -1。运行下面这段程序: from collections import deque def dist(g, s): d = {s: 0} q = deque([s]) while q:
写 BFS 求最短步数
补全 dist:返回一个列表,第 i 项是从 s 到 i 号点的最少步数,走不到记 -1。
0 到 4 最少几步
用上面的 dist,输出 0 号到 4 号的最少步数。