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代替最大值,(*^__^*) 嘻嘻……

  • 相关阅读:
    Java帮助文档的生成
    Java内部类
    Java中利用标签跳出外层循环break
    【转】你真的了解word-wrap和word-break的区别吗?
    Office/Access 2013 扩展支持xbase/DBF 文件
    调用cmd.exe执行pdf的合并(pdftk.exe)
    input 数字输入控制(含小数)
    iis7.5 发布mvc出错的解决办法
    table中超过长度的列,显示省略号
    本地图片的预览和上传
  • 原文地址:https://www.cnblogs.com/Shirlies/p/2479435.html
Copyright © 2011-2022 走看看