深度优先遍历和广度优先遍历的思考

深度优先遍历

https://www.programmercarl.com/图论深搜理论基础.html#dfs-与-bfs-区别

广度优先遍历

https://www.programmercarl.com/图论广搜理论基础.html#广搜的使用场景

区别:

广度优先遍历(BFS)适用于以下场合:

  • 最短路径搜索:当需要找到两个节点之间的最短路径时,可以使用BFS来进行搜索。BFS从起始节点开始逐层向外扩展,直到找到目标节点。由于每层只扩展一步,所以当找到目标节点时,路径长度一定是最短的。

  • 层级遍历:当需要按层级遍历图或树的结构时,BFS是一个很好的选择。BFS会先遍历当前层级的所有节点,然后再遍历下一层级的节点,依次类推。

  • 状态搜索:在状态空间中,如果需要搜索一个满足特定条件的状态,可以使用BFS。例如在迷宫问题中,BFS可以被用于找到从起点到终点的路径

总结来说,要是我们要寻找的是一个唯一的答案,此时可以使用广度优先遍历,因为有一个队列把所有的情况放在里面,要是在队列的前面已经寻找到了答案的话,那么队列里面剩余的所有情况直接忽略,因为只要寻找一个正确答案就可以了

深度优先遍历适用的场合

  • 回溯和搜索问题:DFS的递归性质使其非常适合解决回溯和搜索问题。通过深度优先的方式遍历图或树结构,我们可以搜索所有可能的解。

  • 拓扑排序:DFS可以用于拓扑排序,即将有向无环图(DAG)中的节点按照一定的顺序进行排序。在拓扑排序中,DFS会优先访问每个节点的所有子节点,然后依次回溯。

  • 连通分量:DFS可以用于寻找图中的连通分量。通过遍历图的所有节点,并标记已访问的节点,我们可以确定图中的不同连通分量。

总的来说,深度遍历适用于寻找不是一种答案的所有情况,所以当有的题目需要寻找所有的情况的时候,比如寻找所有的路径的时候,那么我们就可以使用深度优先遍历

posted @ 2023-08-30 20:16  铜锣湾陈昊男  阅读(30)  评论(0)    收藏  举报