您的位置:首页 > 其它

hdu1874 畅通工程续

2016-01-19 17:44 316 查看
#include <stdio.h>

#include <cstdio>

#include <cstring>

#include <algorithm>

using namespace std;

const int INF = 999999;

const int N = 1002;

int path

;

int m, n;

int Min(int a, int b)

{

    return a > b ? b : a;

}

void floyd()

{

    int i, j, k;

    for(k = 0; k < n; k++)

        for(i = 0; i < n; i++)

            for(j = 0; j < n; j++)

                path[i][j] = Min(path[i][j], path[i][k] + path[k][j]);

}

int main()

{

    int i, j, A, B, C, st, ed;

    while(~scanf("%d%d", &n, &m))

    {

        for(i = 0; i < n; i++)

            for(j = 0; j < n; j++)

            {

                if(i == j) path[i][j] = 0;

                else path[i][j] = path[j][i]= INF;

            }

        for(i = 0; i < m; i++)

        {

            scanf("%d%d%d", &A, &B, &C);

            if(path[A][B] > C) path[A][B] = path[B][A] = C;

        }

        floyd();

        scanf("%d%d", &st, &ed);

        if(path[st][ed] == INF) path[st][ed] = -1;

        printf("%d\n", path[st][ed]);

    }

    return 0;
}

心得:权值赋值前记得加条件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu