HDOJ 1874 畅通工程续(最短路 - dijsktra算法)

来源:互联网 发布:经传软件账号密码 编辑:程序博客网 时间:2024/04/30 01:33

擦,没有判重边wa了两发。。

#include <iostream>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <queue>#include <algorithm>using namespace std;const int maxn = 1010;const int inf = 0x3f3f3f3f;bool vis[maxn];int map[maxn][maxn];int dis[maxn];int n, m;void dijkstra(int start){        dis[start] = 0;        int now, mindis;        for(int i = 0; i < n; i++)        {                mindis = inf;                for(int j = 0; j < n; j++)                {                        if(!vis[j] && mindis > dis[j])                        {                                mindis = dis[j];                                now = j;                        }                }                if(mindis >= inf)                        break;                vis[now] = true;                for(int j = 0; j < n; j++)                {                        if(!vis[j] && dis[now] + map[now][j] < dis[j])                                dis[j] = dis[now] + map[now][j];                }        }}int main(){        #ifdef BellWind        freopen("1874.in", "r", stdin);        #endif // BellWind        while(~scanf("%d%d", &n, &m))        {                int a, b, cost;                int s, e;                memset(vis, false, sizeof(vis));                memset(map, 0x3f, sizeof(map));                memset(dis, 0x3f, sizeof(dis));                for(int i = 0; i < m; i++)                {                        scanf("%d%d%d", &a, &b, &cost);                        if(cost < map[a][b])                        {                                map[a][b] = cost;                                map[b][a] = cost;                        }                }                scanf("%d%d", &s, &e);                dijkstra(s);                if(dis[e] >= inf)                        printf("-1\n");                else                        printf("%d\n", dis[e]);        }        return 0;}


0 0