畅通工程续 HDU1874

floyd算法秒过。。。这个算法真的好简单

注意的一点是  两个城镇可能有多条路  存短的一条!!!

#include<bits/stdc++.h>
using namespace std;

int m1[300][300];

int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)==2)
    {
       for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)m1[i][j]=20000;

        for(int i=0;i<n;i++)m1[i][i]=0;
        while(m--)
        {
            int a,b,c;
            scanf("%d%d%d",&a,&b,&c);
            if(m1[a][b]>c){m1[a][b]=m1[b][a]=c;}


        }
        for(int k=0;k<n;k++)
            for(int i=0;i<n;i++)
             for(int j=0;j<n;j++)
              if(m1[i][j]>m1[i][k]+m1[k][j])
                m1[i][j]=m1[i][k]+m1[k][j];


            int a,b;
            scanf("%d%d",&a,&b);
            if(m1[a][b]!=20000)
                printf("%d\n",m1[a][b]);
            else printf("-1\n");



    }



}
View Code

还有D算法和S算法得学一下。

猜你喜欢

转载自www.cnblogs.com/bxd123/p/10323277.html