深度优先遍历DFS

时间:2021-02-10 13:16:52   收藏:0   阅读:0

算法思想

??图中一个未访问的顶点 V 开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底...,不断递归重复此过程,直到所有的顶点都遍历完成,它的特点是不撞南墙不回头,先走完一条路,再换一条路继续走。

代码实现

技术图片

  1. 邻接矩阵实现:

    • 结构体定义:使用二维数组来定义,存入一个结构体中,记录顶点个数。演示是无向图的邻接矩阵

      #define MAX 10
      struct MGraph{
      	int	arr[MAX][MAX];		//存储图的连通状态:1为连通,0为非连通
      	int numVertexes;		//图的顶点数
      };
      int visit[MAX];				//访问标记数组
      
    • DFS算法设计:

      void DFS(MGraph G, int i) {					//i就是顶点的下标
      	visit[i] = true;						//标记访问
      	for (int j = 0;j < G.numVertexes;j++)	//遍历每一个顶点
      		if (G.arr[i][j] && !visit[j])		//如果相连并且没有被访问过
      			DFS(G, j);						//再次调用DFS算法
      }
      
    • 算法入口:

      void DFSTraverse(MGraph G) {
      	memset(visit, 0, G.numVertexes);	//初始化
      	for (int i = 0;i < G.numVertexes;i++)	//对每一个未曾访问过的顶点进行访问
      		if (!visit[i])
      			DFS(G, i);
      }
      
  2. 邻接表实现

技术图片

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!