该题广度优先搜索相对于深度较快。
实现代码如下:
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <math.h>
using namespace std;
int book[101],n,m,e[101][101],cur,flag;
int tail=1,head=1;
int start,end;
struct node
{
int x;//城市编号
int s;//转机次数
}que[1001];
void bfs()
{
que[tail].x=start;
que[tail].s=0;
tail++;
book[start]=1;
while(head<tail)
{
cur=que[head].x;
for(int i=1;i<=n;i++)
{
if(e[cur][i]!=9999999&&book[i]==0)
{
que[tail].x=i;
que[tail].s=que[head].s+1;
tail++;
book[i]=1;
}
if(que[tail-1].x==end)
{
flag=1;
break;
}
}
if(flag==1)
break;
head++;
}
}
int main()
{
int a,b;
scanf("%d%d%d%d",&n,&m,&start,&end);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j)
e[i][j]=0;
else
e[i][j]=9999999;
for(int i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
e[a][b]=1;
e[b][a]=1;
}
bfs();
printf("%d\n",que[tail-1].s);
return 0;
}
/*
5 7 1 5
1 2
1 3
2 3
2 4
3 4
3 5
4 5
*/