【最短路】

HDU 2544 最短路

题意:

输入路口(点)数n,路(线)数m,

已知连通路a[i],b[i],权重c[i],

求指定点1到点n的权重。

题解:

将原有线的权重正反记录,

将经过点i的点全部连通并记录新线的权重,

可以得到所有点与点之间的权重。

#include<iostream>
#include<cstring>
using namespace std;
const int N=100+5;
int main()
{
    int n,m,a,b,c;
    int t[N][N];
    while(cin>>n>>m&&n&&m){
        memset(t,-1,sizeof(t));
        for(int i=0;i<m;i++){
            cin>>a>>b>>c;
            t[a][b]=c;
            t[b][a]=c;
        }
        for(int k=1;k<=n;k++)
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    if((t[i][j]==-1||t[i][j]>t[i][k]+t[k][j])&&t[i][k]!=-1&&t[k][j]!=-1)
                        t[i][j]=t[i][k]+t[k][j];
        cout<<t[1][n]<<endl;
    }
}

猜你喜欢

转载自blog.csdn.net/synlhr/article/details/81158908