#include <bits/stdc++.h>
using namespace std;
typedef struct note{
int x;
int s;
}Note;
Note que[2501];
int point[51][51]={0};
int book[51]={0};
int n,m;
void init(){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j)
point[i][j]=0;
else
point[i][j]=-1;
}
}
}
int main(){
int start,end;
while (cin>>n>>m>>start>>end){
if(start==end){
cout<<"Connot reach"<<endl;
continue;
}
else{
if (start == 0 || end == 0) {
cout << 0 << endl;
}
init();//初始化
int a,b;
for(int i=0;i<m;i++){ //输入数据
cin>>a>>b;
point[a][b]=1;
point[b][a]=1;
}
int head=1,tail=1; //队列
que[tail].x=start;
que[tail].s=0; //初始化
tail++;
book[0]=start;
int cur;
bool flag= false;
while (head<tail){
cur=que[head].x;
for(int i=1;i<=n;i++){
if(point[cur][i]!=-1 and book[i]==0){//判断条件
que[tail].x=i;
que[tail].s=que[head].s+1;
tail++;
book[i]=1;
}
if(que[tail].x==end){
flag= true;
break;
}
}
if(flag)
break;
head++;
}
cout<<que[tail-1].s<<endl;
}
}
return 0;
}
/*
5 7 1 5
1 2
1 3
2 3
2 4
3 4
3 5
4 5
2*/
最少转机(图的广度优先遍历)
最新推荐文章于 2022-04-22 16:52:00 发布