- Description
设有n个城市,编号为0~n-1,m条单向航线的起点和终点由输入提供,寻找一条换乘次数最少的线路方案。
- Input
第一行为三个整数n、m、v,表示城市数、单向航线数和起点城市。以下m行每行两个整数,表示一条边的起点、终点,保证不重复、不失败。2≤n≤20,1≤m≤190
- Output
共n-1行,分别是从起点城市v到其他n-1个城市最少换乘次数,按照终点城市序号从小到大顺序输出,不能抵达时输出-1。
- Sample Input
3 2 0
0 1
1 2
- Sample Output
1
2
#include<iostream>
#include<algorithm>
using namespace std;
#define N 21
int map[N][N],ans[N],used[N],n,m,v;
void BFS()
{
int que[10*N],front=0,rear=0,i,x;
que[rear++]=v;
ans[v]=0;
while(front<rear)
{
x=que[front++];
for(i=0;i<n;i++)
if(i!=x && map[x][i] && !used[i])
{
que[rear++]=i;
ans[i]=ans[x]+1;
used[i]=1;
}
}
}
int main()
{
// freopen("in.txt","r",stdin);
int x,y,i;
while(scanf("%d %d %d",&n,&m,&v)!=EOF)
{
memset(map,0,sizeof(map));
memset(used,0,sizeof(used));
memset(ans,-1,sizeof(ans));
for(i=0;i<m;i++)
{
scanf("%d %d",&x,&y);
map[x][y]=1;
}
BFS();
for(i=0;i<n;i++)
{
if(i!=v)
printf("%d\n",ans[i]);
}
}
return 0;
}