Sesenta y seis. Implementación del lenguaje C de búsqueda en amplitud primero (gráfico no dirigido)

#include<stdio.h>
int main()
{
    
    
	int i,j,n,m,a,b,cur,book[101]= {
    
    0},e[101][101];
	int que[10001],head,tail;
	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] = 99999999;      //假设为正无穷 
	for(i=1;i<=m;i++)     //读入顶点之间的边 
	{
    
    
		scanf("%d %d",&a,&b);
		e[a][b] = 1;
		e[b][a] = 1;     //无向图 
	}
	head = 1;           //队列初始化 
	tail = 1;
	que[tail] = 1;      //从1号顶点出发,将1号顶点加入队列 
	tail++; 
	book[1] = 1;        //标记1号顶点已1访问 
	while(head<tail)     //当队列不为空的时候循环 
	{
    
    
		cur = que[head];    //当前正在访问的顶点编号 
		for(i=1;i<=n;i++)   //从1~n依次尝试 
		{
    
    
			if(e[cur][i]==1 && book[i]==0)
			{
    
    
				que[tail] = i;     //如果从顶点cur的顶点i有边,并且顶点i没有被访问,则将顶点i入队 
				tail ++;
				book[i] = 1;       //标记顶点i已访问 
			}
			if(tail>n)      //如果tail大于n, 则表明所有顶点都已经被访问过 
			{
    
    
				break;
			}
		}
		head++;      //当一个顶点扩展后,head++,然后才能继续往下扩展 
	}
	for(i=1;i<tail;i++)
	   printf("%d  ",que[i]);
	getchar();getchar();
	return 0;
} 

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/JiangYu200015/article/details/108908357
Recomendado
Clasificación