建议把伪代码改成下面这样:
vis[], dis[] dfs(u): vis[u] = 1 记所有满足 u,v 之间有边且 !vis[v] 的点 v 构成的序列为 S 以随机的顺序遍历 S: 如果 vis[v]://加上这一行 退出 //加上这一行 dis[v] = dis[u] + 1 dfs(v) solve(): for i in [1, n]: dis[i] = -1; vis[i] = 0 dis[1] = 0 dfs(1)