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

 

你可能感兴趣的:(DFS)