图深度优先遍历

  深度优先遍历Depth_First_Search,也称深度优先搜索,简称DFS,DFS其实是一个递归的过程,相当于树前序遍历的推广。基本思想:它从图中某个顶点出发V出发,访问此顶点,然后从V未被访问的邻接点出发深度优先遍历图,直至图中所有和V有路径相同的顶点都被访问到,若图中尚有顶点未被访问,则选图中一个未曾被访问的顶点作为起始点,重复上述过程,直至图中所有顶点都被访问到为止。

《图深度优先遍历》

  若采用邻接矩阵的方式,代码如下

void DFS(MGraph G, int i)
{
	int j;
 	visited[i] = TRUE;
 	printf("%s ", G.vexs[i]);/* 打印顶点,也可以其它操作 */
	for(j = 0; j < G.numVertexes; j++)
		if(G.arc[i][j] == 1 && !visited[j])
 			DFS(G, j);/* 对为访问的邻接顶点递归调用 */
}

/* 邻接矩阵的深度遍历操作 */
void DFSTraverse(MGraph G)
{
	int i;
 	for(i = 0; i < G.numVertexes; i++)
 		visited[i] = FALSE; /* 初始所有顶点状态都是未访问过状态 */
	for(i = 0; i < G.numVertexes; i++)
 		if(!visited[i]) /* 对未访问过的顶点调用DFS,若是连通图,只会执行一次 */ 
			DFS(G, i);
}

 

 

头文件以及变量申明定义

#include "stdio.h"    
#include "stdlib.h"   
#include "io.h"  
#include "math.h"  
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

typedef int Status;	/* Status是函数的类型,其值是函数结果状态代码,如OK等 */  
typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */

typedef char VertexType[10]; /* 顶点类型应由用户定义 */
typedef int EdgeType; /* 边上的权值类型应由用户定义 */

#define MAXSIZE 9 /* 存储空间初始分配量 */
#define MAXEDGE 15
#define MAXVEX 9
#define INFINITY 65535

typedef struct
{
	VertexType vexs[MAXVEX]; /* 顶点表 */
	EdgeType arc[MAXVEX][MAXVEX];/* 邻接矩阵,可看作边表 */
	int numVertexes, numEdges; /* 图中当前的顶点数和边数 */ 
}MGraph;

Boolean visited[MAXVEX]; /* 访问标志的数组 */

 

 

主测试函数

int main(void)
{    
	MGraph G;
	CreateMGraph(&G);
	printf("\n深度遍历:");
	DFSTraverse(G);
	return 0;
}

测试结果

《图深度优先遍历》

 

 

 

 

    原文作者:数据结构之图
    原文地址: https://blog.csdn.net/keepmovingha/article/details/8262171
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞