zoukankan      html  css  js  c++  java
  • uva 567【Risk】

    求最短路,Floyd算法,简单的应用

    不过题目真的很晦涩。。。第一个数x表示与第i个数(通俗一点,第i行,其实也是标号为i的点)相邻的点的个数,然后后面有x个值。

    代码如下:
     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 
     5 int g[22][22];
     6 int n;
     7 
     8 bool init()
     9 {
    10     int num;
    11     for(int i = 1;i <= 20;i ++)
    12     {
    13         for(int j = 1;j <= 20;j ++)
    14         {
    15             if(i == j)
    16                 g[i][j] = 0;
    17             else 
    18                 g[i][j] = 1000000;
    19         }
    20     }
    21     for(int i = 1 ;i <= 19;i ++)
    22     {
    23         if(scanf("%d",&num) != 1)
    24             return false;
    25         for(int j = 0;j < num;j ++)
    26         {
    27             int a;
    28             scanf("%d",&a);
    29             g[i][a] = g[a][i] = 1;
    30         }
    31     }
    32     
    33     return true;
    34 }
    35 
    36 void floyd()
    37 {
    38     for(int i = 1;i <= 20;i ++)
    39     {
    40         for(int j = 1;j <= 20;j ++)
    41         {
    42             for(int k = 1;k <= 20;k ++)
    43             {
    44                 g[j][k] = std::min(g[j][k], g[j][i] +g[i][k]);
    45             }
    46         }
    47     }
    48 }
    49 
    50 int main()
    51 {
    52     int cas = 1;
    53     while(init())
    54     {
    55         floyd();
    56         scanf("%d",&n);
    57         int a,b;
    58         printf("Test Set #%d\n",cas ++);
    59         for(int i = 1;i <= n;i ++)
    60         {
    61             scanf("%d%d",&a,&b);
    62             printf("%2d to %2d: %d\n",a,b,g[a][b]);
    63         }
    64         printf("\n");
    65 
    66     }
    67 
    68     return 0;
    69 }
  • 相关阅读:
    背包解法
    第十六周周总结
    软件工程个人课程总结
    学期课后个人总结
    spring事务
    梦断代码03
    团队冲刺的第二十四天
    第十五周周总结
    百度输入法评价
    找到水王
  • 原文地址:https://www.cnblogs.com/Shirlies/p/2450715.html
Copyright © 2011-2022 走看看