2026/2/22 15:13:47
网站建设
项目流程
网站源码安装,wordpress前后台空白,便宜的营销型网站建设,精通网站开发一、dfs与bfs的区别#xff1a;1.大致区别#xff1a;#xff08;1#xff09;dfs#xff1a;紧着一个方向去搜#xff0c;直到搜不下去再换方向#xff08;换方向的过程涉及到了回溯#xff09;。#xff08;2#xff09;bfs#xff1a;先把本节点所连接的所有节点…一、dfs与bfs的区别1.大致区别1dfs紧着一个方向去搜直到搜不下去再换方向换方向的过程涉及到了回溯。2bfs先把本节点所连接的所有节点遍历一遍走到下一个节点的时候再把连接节点的所有节点遍历一遍搜索方向更像的是广度四面八方的搜索过程。二、dfs的搜索过程举例如下图所示。1.该图是一个无向图要搜索从节点1到节点6的所有路径。2.dfs搜索的第一条路径如下所示3.此时找到了节点6该回头再去搜索其他方向了4.又到了节点6再回头去搜索其他方向5.又找到了一条从节点1到节点6的路径再回头发现路径7、8和路径7、9都是死路都走到了已经遍历过的节点。6.那么节点2所连接的路径和节点3所连接的路径都已经走过了撤销路径只能向上回退去撤销当初节点4的选择也就是撤销路径5改为路径10。三、代码框架由于dfs搜索紧着一个方向且需要回溯因此使用递归的方式实现是最方便的代码框架如下所示。void dfs(参数) { if (终止条件) { 存放结果; return; } for (选择本节点所连接的其他节点) { 处理节点; dfs(图选择的节点); // 递归 回溯撤销处理结果 } }四、深搜三部曲1.确定递归函数和参数void dfs(参数)一般情况下深搜需要二维数组的数组结构保存所有的路径需要一维数组保存单一路径这种保存结果的数组可以定义为全局变量以避免函数参数过多。vectorvectorint result; // 保存符合条件的所有路径 vectorint path; // 起点到终点的路径 void dfs (图目前搜索的节点)2.确认终止条件防止出现死循环、栈溢出等问题。if (终止条件) { 存放结果; return; }3.处理当前搜索节点出发的路径一般就是使用一个for循环去遍历当前搜索节点所能走到的所有节点。for (选择本节点所连接的其他节点) { 处理节点; dfs(图选择的节点); // 递归 回溯撤销处理结果 }