• POJ 1125 Stockbroker Grapevine(最短路 Floyd)


    Stockbroker Grapevine

    大意:有N个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径。现在有一个消息要由某个人开始传递给其他所有人,问应该由哪一个人来传递,才能在最短时间内让所有人都接收到消息。若不存在这样一个人,则输出disjoint。

    思路:有向图(互相之间可能不等)中各顶点之间的最短路径问题。一个人收到消息后便开始向所有他能发送的人(因人以固定的不等时间(长度1~10))发送消息,当所有人都收到消息后的时间长短为评价标准。

     1 #include <stdio.h>
     2 #define INF 0x3f3f3f3f
     3 
     4 int n;
     5 int Map[110][110];
     6 
     7 void Floyd()
     8 {
     9     for(int k = 1; k <= n; k++)
    10     {
    11         for(int i = 1; i <= n; i++)
    12         {
    13             for(int j = 1; j <= n; j++)
    14             {
    15                 if(i != j && Map[i][j] > Map[i][k]+Map[k][j])
    16                 {
    17                     Map[i][j] = Map[i][k]+Map[k][j];
    18                 }
    19             }
    20         }
    21     }
    22     int t;
    23     int Min_length = INF;
    24     for(int i = 1; i <= n; i++)
    25     {
    26         int Max_length = 0;
    27         for(int j = 1; j <= n; j++)
    28         {
    29             if(i != j && Max_length < Map[i][j])
    30             {
    31                 Max_length = Map[i][j];
    32             }
    33         }
    34         if(Min_length > Max_length)
    35         {
    36             Min_length = Max_length;
    37             t = i;
    38         }
    39     }
    40     if(Min_length < INF)
    41     {
    42         printf("%d %d
    ", t, Min_length);
    43     }
    44     else
    45     {
    46         printf("disjoint
    ");
    47     }
    48     return ;
    49 }
    50 
    51 void Solve()
    52 {
    53     int a, b;
    54     int m;
    55     while(~scanf("%d", &n) && n)
    56     {
    57         for(int i = 0; i <= n; i++)
    58         {
    59             for(int j = 0; j <= n; j++)
    60             {
    61                 Map[i][j] = INF;
    62             }
    63         }
    64         for(int i = 1; i <= n; i++)
    65         {
    66             scanf("%d", &m);
    67             for(int j = 1; j <= m; j++)
    68             {
    69                 scanf("%d%d", &a, &b);
    70                 Map[i][a] = b;
    71             }
    72         }
    73         Floyd();
    74     }
    75 }
    76 
    77 int main()
    78 {
    79     Solve();
    80 
    81     return 0;
    82 }
    Stockbroker Grapevine
  • 相关阅读:
    long和Long的区别
    C语言的变量的内存分配
    Java蓝桥杯 算法提高 九宫格
    Java实现 蓝桥杯算法提高金明的预算方案
    Java实现 蓝桥杯 算法提高 新建Microsoft world文档
    Java实现 蓝桥杯 算法提高 快乐司机
    Java实现 蓝桥杯 算法提高 三角形
    Java实现 蓝桥杯 算法提高 三角形
    Java实现 蓝桥杯 算法提高 三角形
    Java实现 蓝桥杯 算法提高 三角形
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3525773.html
Copyright © 2020-2023  润新知