裸题
题意:求任意两点之间的最短路径
坑点:测试数据同一条路径有可能出现多次,然后值不一样,注意筛选最小边
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int mp[300][300];
const int inf=20000;
void init() {
for(int i=0;i<203;i++) {
for(int j=0;j<203;j++) {
if(i==j) mp[i][j]=0;
else mp[i][j]=inf;
}
}
}
int main() {
int n,m;
while(scanf("%d%d",&n,&m)!=EOF) {
int a,b,c;
init();
for(int i=1;i<=m;i++) {
scanf("%d%d%d",&a,&b,&c);
mp[a][b]=min(c,mp[a][b]);
mp[b][a]=min(c,mp[a][b]);
}
for(int k=0;k<n;k++) {
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
if(mp[i][j]>mp[i][k]+mp[k][j]) {
mp[i][j]=mp[i][k]+mp[k][j];
}
}
}
}
scanf("%d%d",&a,&b);
if(mp[a][b]!=inf)
printf("%d\n",mp[a][b]);
else printf("-1\n");
}
return 0;
}