zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    POJ 1811 Prime Test 素性测试 分解素因子
    sysbench的安装与使用
    电脑中已有VS2005和VS2010安装.NET3.5失败的解决方案
    I.MX6 show battery states in commandLine
    RPi 2B Raspbian system install
    I.MX6 bq27441 driver porting
    I.MX6 隐藏电池图标
    I.MX6 Power off register hacking
    I.MX6 Goodix GT9xx touchscreen driver porting
    busybox filesystem httpd php-5.5.31 sqlite3 webserver
  • 原文地址:https://www.cnblogs.com/geekpaul/p/4176896.html
Copyright © 2011-2022 走看看