找出图中一个顶点到另一个顶点最少步数,两点直接不能直达,两点之间的加权值都为1
#include<stdio.h>
struct node
{
int x; //城市编号
int s; //转机数
};
int main()
{
int e[50][50],book[50];
int inf=99999999;
int n,m,a,b,i,j,cur,flag=0,start,end;
struct node q[50];
int head,tail;
scanf(“%d%d%d%d”,&n,&m,&start,&end);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(i==j)
e[i][j]=0;
else
e[i][j]=inf;
}
for(i=1;i<=m;i++)
{
scanf(“%d%d”,&a,&b);
e[a][b]=1;
e[b][a]=1;
}
head=1;
tail=1;
q[tail].x=start;
q[tail].s=0;
tail++;
book[start]=1;
while(head<tail)
{
cur=q[head].x;
for(i=1;i<=n;i++)
{
if(e[cur][i]!=9999999 && book[i]==0)
{
book[i]=1;
q[tail].x=i;
q[tail].s=q[head].s+1;
tail++;
}
if(q[tail-1].x==end)
{
flag=1;
break;
}
}
if(flag==1)
break;
head++;
}
printf(“\n最少转机数为%d”,q[tail-1].s);
return 0;
}