深度优先搜索(DFS)和广度优先搜索(BFS)
实际使用中,DFS远多于BFS。
如果只是为了遍历所有结点的话,那么DFS和BFS没什么差别,我们当然更倾向于更方便编写、空间复杂度更低的DFS遍历。
BFS应用场景:
1.求最短路径(遇到的第一个解,一定就是最优解)
DFS应用场景:
1.迷宫问题(判断能否从A点走到B点这种问题)
DFS搜索策略:从某个节点,沿着任一分支尽可能地搜索,直到最后一个节点
递归实现-如果层级过深,会导致栈溢出
遍历顺序:A|B|D|E|C
栈实现-先进后出
入栈顺序:A|BC|DE
出栈顺序:A|CB|ED
BFS搜索策略:逐层搜索,遍历下一层级的所有子节点
队列实现-先进先出
入队列顺序:A|BC|DE
出队列顺序:A|B|C|D|E
框架
// DFS递归实现 dfs(节点) { // 遍历当前节点的子节点 { // 满足访问条件 { // 标记子节点已访问 // dfs(子节点) // 回溯清除标记 } } } int main() { // 遍历可能的首节点 { // 满足访问条件 { // 标记初首节点已访问 // dfs(首节点) // 回溯清除标记 } } } // DFS栈实现 dfs(节点) { // 当前节点入栈 // 标记当前节点已访问 while(栈不为空) { // 出栈 // 遍历出栈节点的子节点 { // 子节点入栈 // 标记子节点已访问 } } }
// BFS队列实现 bfs(节点) { // 当前节点入队列 // 标记当前节点已访问 while(对列不为空) { // 出队列 // 遍历出队列节点下一层级的所有子节点 { // 子节点入队列 // 标记子节点已访问 } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2023-04-24 python:excel文件转csv