首页 > 代码库 > 图的深度优先遍历DFS
图的深度优先遍历DFS
图的深度优先遍历是树的前序遍历的应用,其实就是一个递归的过程,我们人为的规定一种条件,或者说一种继续遍历下去的判断条件,只要满足我们定义的这种条件,我们就遍历下去,当然,走过的节点必须记录下来,当条件不满足后,我们就return,回到上一层,换个方向继续遍历。
模板:
1 //邻接矩阵存储方式 2 bool visited[MAX]; 3 void dfs(MGraph G,int i) 4 { 5 int j; 6 visited[i]=true; 7 cout<<G.vex[i]<<endl; //这个只是进行的操作而已 8 for(j=0;j<G.numVertexes;j++) 9 if(G.arc[i][j]==1&&!visited[j]) 10 dfs(G,j); 11 } 12 13 void init(MGraph G) 14 { 15 int i; 16 for(i=0;i<G.numVertexes;i++) 17 visisted[i]=false; //初始化 18 for(i=0;i<G.numVertexes;i++) 19 if(!visited[i]) 20 dfs(G,i); 21 }
如果存储方式为邻接表的话,只是改变了寻找下一个节点的方式而已。
效率问题:邻接表结构适合点多边少的稀疏图,然后邻接矩阵,因为是二维数组,要查找每个顶点的邻接点需要访问矩阵中的所有元素,因此需要O(n^2)的时间
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。