飞机最少换乘次数问题
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
设有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; }
相关文章推荐
- input输入框中的光标上下不居中的解决方法
- 数据库中的主键
- maven的pom.xml详解
- Inotify监视限值不足问题
- Java进阶(极客)——单例模式(二)优化
- zoj 3636 Decode
- Java + Redis3.0.2集群的应用(三)——数据设计
- iOS定位和位置信息获取
- 嵌入式面试题2
- Template of ACoCorasickAutomata
- 1047. Student List for Course (25)
- 实训项目--银行储蓄系统
- SGU - 132 Another Chocolate Maniac (状态压缩)
- 1047. Student List for Course (25)
- 解决照百度地图api开发指南配置但无法进入主界面问题
- 图解https协议
- Java进阶(极客)——单例模式(一)基本原理
- 银行储蓄系统
- 图的宽度优先遍历序列
- UVA 11609 Teams