题目链接:畅通工程续
题意一读就知道是最短路,给你n个城镇,m条路,然后给你s,t,问你最短路是多少,数据量很小,直接floayd做就可以了,写一个邻接表代表距离
#include <bits/stdc++.h>
using namespace std;
int n,m,dp[1005][1005],x,y,z,s,t;
int main(){
while(cin>>n>>m){
for(int i = 0;i < n;i++)
for(int j = 0;j < n;j++){
if(i == j) dp[i][j] = 0;
else dp[i][j] = 1e9;
}
while(m--){
cin>>x>>y>>z;
dp[x][y] = min(dp[x][y],z);
dp[y][x] = min(dp[y][x],z);
}
cin>>s>>t;
for(int k = 0;k < n;k++)
for(int i = 0;i < n;i++)
for(int j = 0;j < n;j++)
dp[i][j] = min(dp[i][j],dp[i][k]+dp[k][j]);
if(dp[s][t] == 1e9) cout<<"-1"<<endl;
else cout<<dp[s][t]<<endl;
}
return 0;
}