六十五.深度优先搜索C语言实现(无向图)

#include<stdio.h>
int book[101],sum,n,e[101][101];
void dfs(int cur)    //cur是当前所在顶点的编号 
{
    
    
	int i;
	printf("%d",cur);
	sum++;           //每访问一个顶点,sum就加1 
	if(sum==n)
	  return;        //所有的顶点都已经访问过则直接退出 
	for(i=1;i<=n;i++)      //从1号顶点到n号顶点一次尝试,看哪些顶点与当前顶点cur有边相连 
	{
    
    
		if(e[cur][i]==1 && book[i]==0)   //判断当前顶点cur到顶点i是否有边,并判断顶点i是否访问过 
		{
    
    
			book[i] = 1;   //标记顶点i已经访问过 
			dfs(i);        //从顶点i再出发继续遍历 
		}
	}
	return;
}
int main()
{
    
    
	int i,j,m,a,b;
	scanf("%d %d ",&n,&m);
	for(i=1;i<=n;i++)          //初始化二维矩阵 
	   for(j=1;j<=m;j++)
	      if(i==j)
	         e[i][j] = 0;
	      else
	         e[i][j] = 999999999;   //假设为正无穷 
	for(i=1;i<=m;i++)         //读入顶点之间的边 
	{
    
    
		scanf("%d %d",&a,&b);
		e[a][b] = 1;
		e[b][a] = 1;          //无向图,将e[b][a]也赋值为1 
	}
	book[1]=1;         //从1号出发顶点已访问 
	dfs(1);            //从1号顶点开始遍历 
	getchar();getchar();
	return 0;
}

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/JiangYu200015/article/details/108908085