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

  • 相关阅读:
    SpringBoot结合ShardingSphere实现分库分表、读写分离
    SpringBoot结合ShardingSphere实现主从读写分离
    使用Sentinel实现Spring Cloud Gateway网关流量控制
    使用Sentinel实现热点参数限流
    对比学习UIKit和AppKit--入门级
    UIViewController
    C++的异常处理之一:throw是个一无是处的东西
    About Closure
    理解Objective C 中id
    关于文件压缩的一些小知识
  • 原文地址:https://www.cnblogs.com/Shirlies/p/2479435.html
Copyright © 2011-2022 走看看