裸题

题意:求任意两点之间的最短路径

坑点:测试数据同一条路径有可能出现多次,然后值不一样,注意筛选最小边

#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;   
}