• Floyd算法解决最短路径问题


    时间限制:10000ms

    单点时限:1000ms

    内存限制:256MB

    描述

      万圣节的中午,A和B在吃过中饭之后,来到了一个新的鬼屋!鬼屋中一共有N个地点,分别编号为1..N,这N个地点之间互相有一些道路连通,两个地点之间可能有多条道路连通,但是并不存在一条两端都是同一个地点的道路。由于没有肚子的压迫,A和B决定好好的逛一逛这个鬼屋,逛着逛着,A产生了这样的问题:鬼屋中任意两个地点之间的最短路径是多少呢?

    输入

    每个测试点(输入文件)有且仅有一组测试数据。

    在一组测试数据中:

    第1行为2个整数N、M,分别表示鬼屋中地点的个数和道路的条数。

    接下来的M行,每行描述一条道路:其中的第i行为三个整数u_i, v_i, length_i,表明在编号为u_i的地点和编号为v_i的地点之间有一条长度为length_i的道路。

    对于100%的数据,满足N<=10^2,M<=10^3, 1 <= length_i <= 10^3。

    对于100%的数据,满足迷宫中任意两个地点都可以互相到达。

    输出

    对于每组测试数据,输出一个N*N的矩阵A,其中第i行第j列表示,从第i个地点到达第j个地点的最短路径的长度,当i=j时这个距离应当为0。

    样例输入

    5 12

    1 2 967

    2 3 900

    3 4 771

    4 5 196

    2 4 788

    3 1 637

    1 4 883

    2 4 82

    5 2 647

    1 4 198

    2 4 181

    5 2 665

    样例输出

    0 280 637 198 394

    280 0 853 82 278

    637 853 0 771 967

    198 82 771 0 196

    394 278 967 196 0

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 int n, m, map[101][101];
     7 
     8 void flody(){
     9     for(int k = 1; k <= n; ++k){
    10         for(int i = 1; i <= n; ++i){
    11             for(int j = 1; j <= n; ++j){
    12                 map[i][j] = min(map[i][j], map[i][k] + map[k][j]);
    13             }
    14         }
    15     }
    16 }
    17 
    18 int scan(){
    19     char c;
    20     while(c = getchar(), c < '0' || '9' < c)
    21         ;
    22     int ret = c - '0';
    23     while(c = getchar(), '0' <= c && c <= '9')
    24         ret = ret * 10 + c - '0';
    25     return ret;
    26 }
    27 
    28 void print(int x){
    29     if(x > 9)
    30         print(x / 10);
    31     putchar(x % 10 + '0');
    32 }
    33 int main(){
    34     int u_i, v_i, length_i;
    35     memset(map, 10, sizeof(map));
    36     n = scan();
    37     m = scan();
    38     while(m--){
    39         u_i = scan();
    40         v_i = scan();
    41         length_i = scan();
    42         if(map[u_i][v_i] > length_i)
    43             map[u_i][v_i] = map[v_i][u_i] = length_i;
    44     }
    45     flody();
    46     for(int i = 1; i <= n; ++i){
    47         for(int j = 1; j <= n; ++j){
    48             if(i == j){ putchar('0'); putchar(' ');}
    49             else{ print(map[i][j]); putchar(' '); } 
    50         }
    51         puts("");
    52     }
    53     return 0;
    54 }
  • 相关阅读:
    Windows安全事件日志中的事件编号与描述
    Apache启动失败,请检查相关配置。MySQL5.1已启动成功
    scrapy
    python 与mongodb 交互
    mongo 的导入和导出
    MongoDB
    json字符串和字典的区别补充
    第七章:错误处理
    第六章:个人主页和头像
    第五章:用户登录
  • 原文地址:https://www.cnblogs.com/geekpaul/p/4176896.html
Copyright © 2020-2023  润新知