其他分享
首页 > 其他分享> > B - The Two Routes

B - The Two Routes

作者:互联网

  题目:

 

题目网址:Problem - 602C - Codeforces

  思路:

有n个城镇,m条铁路,没有铁路的地方就有公路求火车和汽车后到的那个的最小时间

如果有直达的就看汽车,将铁路都设为最大其他为1;

没有直达,就对火车进行操作除铁路都设为最大;

对处理后的二维数组进行Floyd算法处理,输出答案;

  代码实现:

#include<iostream>
#include<algorithm>
using namespace std;
const int INF=1000000000;
const int maxn=500;
int mp[maxn][maxn];
int main()
{
    int n,m;
    cin>>n>>m;
    while(m--)
    {
        int x,y;
        cin>>x>>y;//输入铁路
        mp[x][y]=mp[y][x]=1;
    }
    if(mp[1][n])//判断是否有直达
        for(int i=1; i<=n; i++)//有直达看汽车
            for(int j=1; j<=n; j++)
                if(mp[i][j])//有铁路设为最大,没铁路设为1
                    mp[i][j]=INF;
                else
                    mp[i][j]=1;
    else //没有铁路就看火车
      for(int i=1; i<=n; i++)
          for(int j=1; j<=n; j++)
             if(!mp[i][j])//没铁路设为最大
                 mp[i][j]=INF;

    for(int k=1;k<=n;k++)//进行Floyd操作
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                if(i!=j && j!=k)
                   mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
    if(mp[1][n]<INF)//如果能到达就输出否则输出-1
        cout<<mp[1][n]<<endl;
    else
        cout<<"-1"<<endl;
    return 0;
}

 

标签:直达,int,Two,铁路,cin,maxn,mp,Routes
来源: https://www.cnblogs.com/wangdy/p/15065914.html