标签:c style class blog code java
图的深度优先遍历是树的前序遍历的应用,其实就是一个递归的过程,我们人为的规定一种条件,或者说一种继续遍历下去的判断条件,只要满足我们定义的这种条件,我们就遍历下去,当然,走过的节点必须记录下来,当条件不满足后,我们就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)的时间
标签:c style class blog code java
原文地址:http://www.cnblogs.com/jhldreams/p/3775378.html