HDU2544 最短路

来源:互联网 发布:巴西经济危机 知乎 编辑:程序博客网 时间:2024/04/30 07:53

感觉bellman 和 djikstra处理的时候都要注意是否双向= =

#include <cstdio>#include <iostream>#include <cstring>using namespace std;const int INF = 0x3f3f3f;const int MAX = 1e4 + 5;struct EDGE{    int from, to, cost;    EDGE(int a = 0, int b = 0, int c = 0)    : from(a), to(b), cost(c) {}};EDGE edge[MAX];int d[105];int n, m;int main(){    while (scanf("%d%d", &n, &m))    {        if (n == 0 && m == 0)            break;        int cnt = 0;        int t_from, t_to, t_cost;        for (int i = 0; i < m; ++i)        {            scanf("%d%d%d", &t_from, &t_to, &t_cost);            edge[cnt++] = EDGE(t_from, t_to, t_cost);            edge[cnt++] = EDGE(t_to, t_from, t_cost);        }        memset(d, INF, sizeof(d));        d[1] = 0;        while (true)        {            bool update = false;            for (int i = 0; i < 2 * m; ++i)            {                EDGE e = edge[i];                if (d[e.from] != INF && d[e.to] > d[e.from] + e.cost)                {                    d[e.to] = d[e.from] + e.cost;                    update = true;                }            }            if (!update)                break;        }        printf("%d\n", d[n]);    }    return 0;}


0 0