当前位置: 首页 > news >正文

孝感市网站建设_网站建设公司_产品经理_seo优化

建网站需要的设备,企业门户网站 php,宁波建网站可按需定制,php网站开发范例目录 一、引言二、算法步骤三、原理演示递归实现非递归实现#xff08;使用堆栈#xff09; 四、代码实战五、结论 一、引言 深度优先搜索#xff08;DFS#xff09;是一种在图或树中进行搜索的算法#xff0c;它沿着树的深度遍历树的节点#xff0c;尽可能深的搜索树的分… 目录 一、引言二、算法步骤三、原理演示递归实现非递归实现使用堆栈 四、代码实战五、结论 一、引言 深度优先搜索DFS是一种在图或树中进行搜索的算法它沿着树的深度遍历树的节点尽可能深的搜索树的分支。当节点v的所有边都已探寻过搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点则选择其中一个作为源节点并重复以上过程整个进程反复进行直到所有节点都被访问为止。     DFS是一种盲目搜索即它并不需要知道目标的位置只是尽可能地遍历所有可能的路径。因此它的搜索效率并不高特别是在面对大规模数据时。然而DFS可以找到目标值或解决目标问题对于解决NP问题作用很大。     此外DFS如同数据结构中的栈结构是一种后进先出的结构导致了所有的点进入栈时有一个顺序我们称之为 “DFS序”。 二、算法步骤 深度优先搜索算法的步骤如下 选取图中某一顶点Vi为出发点访问并标记该顶点。以Vi为当前顶点依次搜索Vi的每个邻接点Vj若Vj未被访问过则访问和标记邻接点Vj若Vj已被访问过则搜索Vi的下一个邻接点。以Vj为当前顶点重复步骤2直到图中和Vi有路径相通的顶点都被访问为止。若图中尚有顶点未被访问过非连通的情况下则可任取图中的一个未被访问的顶点作为出发点重复上述过程直至图中所有顶点都被访问。 三、原理演示 递归实现 选择起始节点从图中的一个起始节点开始将该节点标记为已访问。递归探索邻居节点对于当前节点遍历它的邻居节点。如果邻居节点尚未被访问就递归地调用深度优先搜索函数以此邻居节点为新的起始节点重复步骤1。回溯当当前节点的所有邻居节点都被访问后回溯到上一个节点并继续遍历其未被访问的邻居节点。重复步骤2和3直到图中的所有节点都被访问。 下面是递归实现深度优先搜索的示例代码 public void dfsRecursive(Node node, SetNode visited) {visited.add(node);System.out.print(node.value );for (Node neighbor : node.neighbors) {if (!visited.contains(neighbor)) {dfsRecursive(neighbor, visited);}} }非递归实现使用堆栈 选择起始节点从图中的一个起始节点开始将该节点标记为已访问并将它入栈。迭代遍历使用一个循环不断从栈中弹出节点然后遍历它的邻居节点。探索邻居节点对于当前弹出的节点遍历其邻居节点。如果邻居节点尚未被访问就将其标记为已访问并将其入栈。重复步骤2和3直到栈为空。 下面是非递归实现深度优先搜索的示例代码 public void dfsIterative(Node start) {StackNode stack new Stack();SetNode visited new HashSet();stack.push(start);visited.add(start);while (!stack.isEmpty()) {Node current stack.pop();System.out.print(current.value );for (Node neighbor : current.neighbors) {if (!visited.contains(neighbor)) {stack.push(neighbor);visited.add(neighbor);}}} }无论采用递归还是非递归方式深度优先搜索的关键思想是深入到尽可能深的层级直到无法再深入为止然后回溯到上一个节点继续探索。这一过程不断重复直到遍历整个图。深度优先搜索对于解决路径查找、拓扑排序、连通性检测等问题都非常有用。 四、代码实战 以下是深度优先搜索算法的Java代码实现 import java.util.*;public class DFS {private int V; // 顶点数量private LinkedListInteger adj[]; // 邻接表// 构造函数DFS(int v) {V v;adj new LinkedList[v];for (int i 0; i v; i) {adj[i] new LinkedList();}}// 添加边void addEdge(int v, int w) {adj[v].add(w);}// DFS函数void DFSUtil(int v, boolean visited[]) {// 标记当前节点为已访问并输出该节点visited[v] true;System.out.print(v );// 递归访问与v节点相邻的未访问节点IteratorInteger i adj[v].listIterator();while (i.hasNext()) {int n i.next();if (!visited[n])DFSUtil(n, visited);}}// DFS函数void DFS(int v) {// 标记所有顶点为未访问状态boolean visited[] new boolean[V];// 调用递归函数DFSUtil开始从顶点v进行DFS遍历DFSUtil(v, visited);} }五、结论 我们一起来总结一下 深度优先搜索在计算机科学中有着广泛的应用例如用于遍历树或图的结构、查找路径、解决优化问题等。它的优点在于空间复杂度相对较小可以处理大规模的数据同时可以避免搜索冗余的节点。然而深度优先搜索也有其局限性例如可能会陷入死循环或无法找到最优解因此需要根据具体问题选择合适的算法进行优化。 点赞收藏富婆包养✋✋
http://www.ihoyoo.com/news/97051.html

相关文章:

  • 顺德销售型网站建设品牌建设指标考核
  • 网站标题的选择博客网站做啥好
  • win2008r做网站成品网站源码免费
  • 新媒体运营培训学校网站建设需要做的优化工作
  • 建设网站的公司济南兴田德润o简介图片网站加载特效代码
  • 深圳网站建设模板wordpress 静态资源加速
  • 广东建设教育协会网站2345网址大全最新版下载
  • 小程序网站开发运行合同烟台网站建设方案
  • 合江网站建设福田保安公司招聘
  • 课外辅导东莞网站建设技术支持wordpress汽车模版
  • 南京的网站建设公司哪家好佛山网站优化体验
  • 西安网站建设哪家好wordpress有没有翻书的主题
  • 创意+wordpress企业网站排名优化哪家好
  • 临沂购买模板建站wordpress 4.5.2 漏洞
  • 建设一个棋牌类网站湛江建设局网站
  • 灵感网站武极云主机
  • 江苏和城乡建设厅网站中国工程监理人才网
  • 企业建筑网站内容营销的定义
  • 高权重网站做js代码跳转php网站建设参考文献
  • 小说网站的阅读界面怎么做的焊接球网架公司
  • 网站推广的途径和推广要点中山市两学一做网站
  • 《网站推广策划》哪家网站开发公司好
  • 临西网站建设价格wordpress去掉category
  • 容县网站开发网店营销推广方案论文
  • 住房城乡建设厅网站准考证网站备案 内容
  • 夸克建站系统官网网站建设为了什么
  • 常德论坛市民留言合肥seo建站
  • fms 视频网站建设秦皇岛市海港区邮编
  • 中国化工网网站建设建议网页设计是干嘛的
  • 建一个商城网站需要多少钱大连金普新区规划建设局网站