1049-飞机最少换乘次数问题
描述
设有n个城市,编号为0~n-1,m条单向航线的起点和终点由输入提供,寻找一条换乘次数最少的线路方案。
输入
第一行为三个整数n、m、v,表示城市数、单向航线数和起点城市。以下m行每行两个整数,表示一条边的起点、终点,保证不重复、不失败。2≤n≤20,1≤m≤190
输出
共n-1行,分别是从起点城市v到其他n-1个城市最少换乘次数,按照终点城市序号从小到大顺序输出,不能抵达时输出-1。
样例输入
3 2 0
0 1
1 2
样例输出
1
2
#include<iostream> #include<list> using namespace std; int a[20][20]={0}; int b[20]; int n; bool *visit; void bfs(int v) { list<int> q; int j=1; int i; if(!visit[v]) { q.push_back(v); visit[v]=true; } while(q.size()>0) { int t=q.front(); q.pop_front(); for(i=0;i<n;i++) { if(a[t][i]&&!visit[i]) { q.push_back(i); visit[i]=true; b[i]=j; } } j++; } } int main() { int m,v; cin>>n>>m>>v; int i,j; int x,y; for(i=0;i<m;i++) { cin>>x>>y; a[x][y]=1; } visit=new bool[n]; for(i=0;i<n;i++) { visit[i]=false; b[i]=-1; } bfs(v); for(j=1;j<n;j++) cout<<b[j]<<endl; delete[]visit; return 0; }