zoukankan      html  css  js  c++  java
  • hdu 1874【畅通工程续】

    在此郑重的向南柯小朋友表示我的感谢!!

    如果不是他告诉我输入的时候需要处理

    if(g[a][b] == -1 || g[a][b] > w)
        g[a][b] = g[b][a] = w;

    (从一个点到另外一个点竟然有好几种选择,囧,我们仅仅需要考虑最小的就ok了)这个东西的话,相信我是找不出问题来的.......

    也向他表示感谢HDU today这一题也是他找出了问题,就是起点和目的地相同的情况我没有考虑......

    代码如下:
     1 #include <cstdio>
     2 #include <cstring>
     3 
     4 int g[200][200];
     5 int vis[200];
     6 int d[200];
     7 int n,m;
     8 int start,end;
     9 
    10 void dij()
    11 {
    12     memset(vis,0,sizeof(vis));
    13     for(int i = 0;i < n;i ++)
    14     {
    15         d[i] = g[start][i];
    16     }
    17 
    18     vis[start] = 1;
    19     for(int i = 0;i < n;i ++)
    20     {
    21         int minn = -1;
    22         int k = 0;
    23         for(int j = 0;j < n;j ++)
    24         {
    25             if(!vis[j]&&d[j] != -1&&(minn == -1 || minn > d[j]))
    26                 minn = d[k = j];
    27         }
    28 
    29         if(minn == -1)
    30             break;
    31         vis[k] = 1;
    32 
    33         for(int j = 0;j < n;j ++)
    34         {
    35             if(!vis[j] &&g[k][j] != -1 && (d[j] == -1 || d[j] > d[k] + g[k][j]))
    36             {
    37                 d[j] = d[k] + g[k][j];
    38             }
    39         }
    40     }
    41 
    42     printf("%d\n",d[end]);
    43 }
    44 
    45 int main()
    46 {
    47     while(scanf("%d%d",&n,&m) == 2)
    48     {
    49         memset(g,-1,sizeof(g));
    50         for(int i = 0;i < m;i ++)
    51         {
    52             int a,b,w;
    53             scanf("%d%d%d",&a,&b,&w);
    54             if(g[a][b] == -1 || g[a][b] > w)
    55                 g[a][b] = g[b][a] = w;
    56             g[a][a] = g[b][b] = 0;
    57         }
    58 
    59         scanf("%d%d",&start,&end);
    60         if(start == end)
    61         {
    62             printf("0\n");
    63             continue;
    64         }
    65         dij();
    66     }
    67 
    68     return 0;
    69 }

    我是喜欢用-1来表示不可达的,不太喜欢用一个大值,有时候出问题了就喜欢看是不是这个-1的问题,汗......转移了我找错的注意力......不过我还是用-1代替最大值,(*^__^*) 嘻嘻……

  • 相关阅读:
    x64 平台开发 Mapxtreme 编译错误
    hdu 4305 Lightning
    Ural 1627 Join(生成树计数)
    poj 2104 Kth Number(可持久化线段树)
    ural 1651 Shortest Subchain
    hdu 4351 Digital root
    hdu 3221 Bruteforce Algorithm
    poj 2892 Tunnel Warfare (Splay Tree instead of Segment Tree)
    hdu 4031 Attack(BIT)
    LightOJ 1277 Looking for a Subsequence
  • 原文地址:https://www.cnblogs.com/Shirlies/p/2479435.html
Copyright © 2011-2022 走看看