//图的广度优先遍历更适用于所有边的权值相等
#include <stdio.h>
#include <stdlib.h>
#define INF 100000
struct node{
int num;//城市编号
int time;//转机次数
};
struct node queue[100];
int head=0;
int tail=0;
int map[100][100];
int book[100];//标记
int n,m;
int start,end;
int main()
{
scanf("%d%d",&start,&end);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j)
map[i][j]=0;
else
map[i][j]=INF;
}
}
for(int i=1;i<=m;i++){
int a,b;
scanf("%d%d",&a,&b);
map[a][b]=1;
map[b][a]=1;
}
book[start]=1;
queue[tail].num=start;
queue[tail].time=0;
tail++;
while(head<tail){
if(queue[head].num==end){
printf("%d\n",queue[head].time);
break;
}
for(int i=1;i<=n;i++){
if(book[i]==0&&map[queue[head].num][i]==1){
book[i]=1;
queue[tail].num=i;
queue[tail].time=queue[head].time+1;
tail++;
}
}
head++;
}
return 0;
}
啊哈算法 最小转机(图的广度优先遍历)
原文作者:数据结构之图
原文地址: https://blog.csdn.net/ccDLlyy/article/details/52829019
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/ccDLlyy/article/details/52829019
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。