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