zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Linux命令大全
    paramiko 使用总结(SSH 操作远端机器)
    Django之ModelForm详解
    django模板之forloop
    学习VUE笔记及遇到的坑
    bootstrap table加载失败
    使用RedisTemplate遇到的坑
    grunt 不是内部或外部命令,也不是可运行的程序或批处理文件
    SpringBoot关于系统之间的远程互相调用
    数据在网络中的传输
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3525773.html
Copyright © 2011-2022 走看看