1049-飞机最少换乘次数问题

描述

 

设有n个城市,编号为0n-1m条单向航线的起点和终点由输入提供,寻找一条换乘次数最少的线路方案。

 

输入

 

第一行为三个整数nmv,表示城市数、单向航线数和起点城市。以下m行每行两个整数,表示一条边的起点、终点,保证不重复、不失败。2n201m190

 

输出

 

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;

}

  

你可能感兴趣的:(问题)