hdu 1599

http://acm.hdu.edu.cn/showproblem.php?pid=1599

很有意思的floyd;

#include<stdio.h>
#include<string.h>
const int N = 105;
const int inf = 0xffffff;
int as[N][N],bs[N][N],ans;
void floyd(int n)
{
    int k,i,j;
    for(k = 1; k <= n; ++ k){
        for(i = 1; i <= k; ++ i)
            for(j = 1; j < i; ++ j)
                if(ans>as[i][j]+bs[i][k]+bs[k][j])
                    ans = as[i][j] + bs[i][k] + bs[k][j];
        for(i = 1; i <= n; ++ i)
            for(j = 1; j <= n; ++ j)
                if(as[i][j] > as[i][k] + as[k][j])
                    as[i][j] = as[i][k] + as[k][j];
    }
}
int main()
{
    int i,j,k,t,n,m;
    while(scanf("%d %d",&n,&m)==2)
    {
        for(i = 0; i < N; ++ i) for(j = 0; j < N; ++ j)  as[i][j] = bs[i][j] = inf;
        int a,b,c;
        while(m--){ scanf("%d %d %d",&a,&b,&c); if(as[a][b]>c) as[a][b] = bs[a][b] = as[b][a] = bs[b][a] = c; }
        ans = inf;
        floyd(n);
        if(ans!=inf) printf("%d\n",ans); else puts("It's impossible.");
    }return 0;
}

posted on 2012-06-03 20:59  aigoruan  阅读(184)  评论(0)    收藏  举报

导航