bfs广度遍历

#include<stdio.h>
int main()
{
    
    
	//广度遍历用的是邻接表 和深度遍历用的是邻接矩阵共同就是输入用的都是矩阵的方式输入的 
	int i,j,a,b,n,m,que[10001],book[101]={
    
    0},e[101][101],cur;
	//进行初始化
	scanf("%d %d",&n,&m); //n:结点的个数也就是矩阵的行和列 //不是重复的 
	for(i=1;i<=n;i++)
	{
    
    
		for(j=1;j<=n;j++)
		{
    
    
			if(i==j) e[i][j]=0;
			else
			e[i][j]=999999;//9999代表无穷大 
		}
	 } 
	 
	//遍历输入
	 for(i=1;i<=m;i++)
	{
    
       printf("请输入元素\n");
		scanf("%d %d",&a,&b);
		e[a][b]=1;//因为是无向图所以双向都需要标记 
		e[b][a]=1;}
		 //进行遍历	
	     int head,tail;//定义头指针和尾指针
		 head=1;
		 tail=1;
		 que[tail]=1;//队列从顶点1开始 
		 tail++;
	     book[1]=1;//顶点1进行标记
	   //bfs算法啦  
		while(head<tail)
		{
    
    
			cur=que[head];
	  	   for(i=1;i<=n;i++)
	  	   {
    
    
	  		if(e[cur][i]==1&&book[i]==0)
	  		{
    
    
	  			que[tail]=i;//队列从顶点1开始 
			    tail++;
				book[i]=1;//顶点1进行标记
			  }
			  if(tail>n) 
			  break ;
          }
          head++; 
	   } 
	   for(i=1;i<tail;i++)
	   printf("%d ",que[i]);
	   
	   getchar();
	   getchar(); 
	 return 0;
 }

猜你喜欢

转载自blog.csdn.net/weixin_46809332/article/details/106023848