5
社区成员
发帖
与我相关
我的任务
分享汤姆想去市中心看望他的老朋友杰瑞,但是汤姆遇到了一个问题,他想知道怎样才能最快地到达市中心,现在城市的公交车站有n[2,100]个,城市里有m[1,1000]条公交线路。汤姆在第一个汽车站,杰瑞在第n个汽车站。
第一行是(m,n)
接下来的m行是a,b,c (a,b是汽车站的名称,c是从a站到b站的时间)
汤姆到达市中心的最短时间。
1 2 1 2 10 3 4 1 2 10 2 3 10 3 4 10
10 30
思路:裸题,Floyd算法。
代码:
#include<bits/stdc++.h>
#define MAX 101
#define INF 100000005
using namespace std;
int G[MAX][MAX];
int n,m;//顶点数,边数
void InitG(int n){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
G[i][j]=INF;
}
}
}
void OutPutG(int n){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cout<<G[i][j]<<'\t';
}
cout<<endl;
}
}
int main(){
int i,j,w=0;//边权
cin>>m>>n;//m-边 ,n-顶点
InitG(n);//初始化
for(int k=1;k<=m;k++){//赋权值
cin>>i>>j>>w;
G[i][j]=G[j][i]=w;
}
//Floyd
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
G[i][j]=min(G[i][k]+G[k][j],G[i][j]);
}
}
}
cout<<G[1][n]<<endl;
//OutPutG(n);
return 0;
}
输出:
