在一个无向图中
import java.util.*;
class node
{
//在哪个城市转机几次
int x; //城市编号
int k; //转机次数
}
public class Main{
static int maxx = 1005;
static int n,m,s,t; //n个城市,m条航线,s起点,t终点
static int head,tail;
static int e[][] = new int [maxx][maxx];
static int book[] = new int[maxx];
public static void main(String [] args) {
Scanner in = new Scanner(System.in);
n = in.nextInt();
m = in.nextInt();
s = in.nextInt();
t = in.nextInt();
node que[] = new node[maxx];
int flag = 0;
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] = maxx;
}
}
for(int i=1;i<=m;i++)
{
int a = in.nextInt();
int b = in.nextInt();
e[a][b] = e[b][a] = 1;
}
for(int i=1;i<=n;i++)
que[i] = new node(); //************一定要加这个,否则不会用到结构体*****************
head = tail = 1;
que[tail].x = s; //开始在起始城市
que[tail].k = 0;
tail ++;
book[s] = 1;
while(head < tail)
{
int cur = que[head].x;
for(int i=1;i<=n;i++)
{
if(book[i] == 0 && e[cur][i] == 1)
{
book[i] = 1;
que[tail].x = i;
que[tail].k = que[head].k+1; //后一次(子节点)的转机次数是在父节点的次数基础上加1的
tail++;
}
if(que[tail-1].x == t) //到达终点就不用再继续
{
flag = 1;
break;
}
}
if(flag == 1)
break;
head ++;
}
System.out.println(que[tail-1].k);
}
}