题目:
题目网址: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;
}