描述
设有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;
}