您的位置:首页 > 其它

飞机最少换乘次数问题

2015-07-18 10:28 375 查看
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

,ans
,used
,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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: