• Floyd算法


     1 #include<iostream>
     2 using namespace std;
     3 int map[100][100];
     4 void Init(int N)
     5 {
     6     for(int i=1; i<=N; i++){
     7         for(int j=1; j<=N; j++){
     8             if(i == j)
     9             map[i][j] = 0;
    10             else
    11             map[i][j] = 999;
    12         }
    13     }
    14 }
    15 void Floyd(int N)
    16 {
    17     for(int k=1; k<=N; k++){
    18         for(int i=1; i<=N; i++){
    19             for(int j=1; j<=N; j++){
    20                 if(map[i][k] + map[k][j] < map[i][j])
    21                 map[i][j] = map[i][k] + map[k][j];
    22             }
    23         }
    24     }
    25 }
    26 int main()
    27 {
    28     int N, M, S;// N 表示点的个数, M 表示边的个数, S 表示出发点 
    29     int v1, v2, len;
    30     
    31     cin>>N>>M>>S;
    32     
    33     Init(N);
    34     for(int i=0; i<M; i++){
    35         cin>>v1>>v2>>len;
    36         map[v1][v2] = len;
    37         map[v2][v1] = len;
    38     }
    39     Floyd(N);
    40     for(int i=1; i<=N; i++)
    41     cout<<map[i][S]<<" ";
    42 } 
    43 /*测试用例 
    44 5 6 1
    45 1 2 14
    46 1 3 2
    47 1 4 6
    48 2 5 2
    49 3 4 3
    50 4 5 1
    51 */
  • 相关阅读:
    Validate US Telephone Numbers
    7月份总结
    Arguments Optional
    Everything Be True
    手机开发网页模板(20140124)
    整站开发初始化
    switch滑动开关
    js 面向对象
    Bootstrap 导航栏
    Bootstrap 标签页
  • 原文地址:https://www.cnblogs.com/Jie-Fei/p/10581227.html
Copyright © 2020-2023  润新知