C语言 图的深度优先遍历

实验内容:

(1)实现图的邻接矩阵表示,并创建图;

(2)对邻接矩阵表示的图实现深度优先遍历;

深度优先遍历的基本思想:

① 选择一个起始点出发,并访问之;

②一次从起始点的未访问过的邻接点出发,深度遍历图,直到图中与起始点有路径相通的顶点都被访问过为止;

③如此时图中尚有顶点未被访问过,则另选图中一个未访问过的顶点作起始点, 重复上述过程,直到所有顶点被访问过为止。

C语言代码如下:

#include<stdio.h>
#define MaxSize 100
typedef struct
{
	int n,e;							//顶点数、边数 
	int link[MaxSize][MaxSize];			//两顶点之间连接 
	char vexs[MaxSize]; 				//顶点的名称 
}MGraph;


void CreateGraph(MGraph *G)
{
	int i,j,k;
	printf("请输入顶点数和边数:");
	scanf("%d%d",&(G->n),&(G->e));
	for(i=0;i<G->n;i++)					 //初始化邻接矩阵 ,全部置零 
	{
		for(j=0;j<G->n;j++)
		{
			G->link[i][j]=0;
		}
	}
	 
	printf("\n请输入每个顶点的名称:\n");
	fflush(stdin);
	for(i=0;i<G->n;i++)
	{
		scanf("%c",&G->vexs[i]); 
		fflush(stdin);					//清除缓冲区 
	}	
	printf("\n请输入边的信息:");
	for(k=0;k<G->e;k++)                 //输入邻接矩阵 
	{
		scanf("%d,%d",&i,&j);
		G->link[i][j]=1;
	}
	printf("输出的邻接矩阵如下:"); 
	for(i=0;i<G->n;i++)					 //打印邻接矩阵 
	{
		printf("\n"); 
		for(j=0;j<G->n;j++)
			printf("%8d",G->link[i][j]) ; 
	}
}
int visited[MaxSize];
void dfs(MGraph *G,int i)				 
{
	int j;
	printf("%c",G->vexs[i]);
	visited[i]=1;
	for(j=0;j<G->n;j++)
	{
		if(G->link[i][j]==1&&visited[j]==0)
		{
			dfs(G,j);		
		}
	}
}
void DFSTraverse(MGraph *G) 
{
	int i;
	for(i=0;i<G->n;i++)
	{
		visited[i]=0;  				    //全部标记为未访问 
	} 
	for(i=0;i<G->n;i++)
	{
		if(visited[i]==0)
		{
			dfs(G,i);
		}
	} 
}
int main()
{
	MGraph G;
	CreateGraph(&G);
	printf("\n\n深度优先遍历序列:");
	DFSTraverse(&G);
	return 0; 
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是不是应该好好学习呢?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值