1
2
看到我 answer 关于强连接组件的早期问题。 您的DFS在写入时也是非常低效的,因为您在i=0处开始反复扫描;您的堆栈应该记住您离开的位置,然后从那里继续。递归更自然,但如果调用堆栈大小有界,则显式堆栈最好(仅适用于大型树)。 这是一个递归的DFS。如果您对存储DFS树不感兴趣,可以将1存储在前置任务[]中,而不是从中访问它的节点中):
上面有一个非递归的DFS模式,但是使用相同的堆栈变量
这可以在没有goto的情况下进行构建(它只是一个命名为continue-to-outmost循环),但在我看来没有任何真正的清晰性。 无论如何,递归调用要简单得多。有递归伪代码 Tarjan's strongly connected components algorithm 你可以相当直接地转录。如果需要帮助使其非递归(显式堆栈),请询问。 |
2
1
您需要存储从一个节点到下一个节点的移动所生成的边。然后您可以验证图中的所有节点都是通过边连接的。 |
3
0
运行Dijkstra的算法。如果在末尾,您的队列是空的,并且一些顶点没有着色,则您的图形没有连接。这是保证线性时间的,DFS方法有一个最坏情况下的二次分析。 |
Tony Hellmuth · 求矩阵中最大连通区域的大小 6 年前 |
Rxzlion · Python-回溯迷宫生成递归函数理解 6 年前 |
Salmaan P · 在python中优化DFS 7 年前 |
ssharma · 平衡二叉树上预序和DFS的时间复杂度相同吗? 7 年前 |
101ldaniels · DFS发现和完成时间 8 年前 |
Ankit Mishra · 图与BFS和DFS树的等价性 8 年前 |
MJM · 使用DFS计算Java中5x5场地上可能的骑士移动 8 年前 |