图的深度优先遍历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)的时间

 

posted @ 2014-06-07 21:29  Fighting_frank  阅读(241)  评论(0编辑  收藏  举报