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
  • 相关阅读:
    java8大排序
    如何删除oracle 的用户及其数据
    JavaScript开发者常忽略或误用的七个基础知识点
    Vim学习指南
    5个开发人员不应该错过的最好跨平台PHP编辑器
    OpenGL 简介
    web 页面内容优化管理与性能技巧
    创建高性能移动 web 站点
    近期十大优秀jQuery插件推荐
    30本世界名著浓缩成的经典话语
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3525773.html
Copyright © 2011-2022 走看看