zoukankan      html  css  js  c++  java
  • 最短路径——Floyd算法

    如何求一张图中任意两顶点之间的最短路径长度,这里写一种最简单的算法——Floyd算法:

     1 #include<stdio.h>
     2 
     3 #define inf 9999
     4 
     5 int main()
     6 {
     7     int e[10][10];        //用邻接矩阵表示图
     8     printf("请输入顶点和边的数目:");
     9     int n,m;
    10     scanf("%d%d",&n,&m);
    11     for(int i=0;i<n;i++)
    12     {
    13         for(int j=0;j<n;j++)
    14         {
    15             if(i==j)
    16             {
    17                 e[i][j]=0;
    18             }
    19             else
    20             {
    21                 e[i][j]=inf;
    22             }
    23         }
    24     }
    25 
    26     int a,b,c;
    27     for(int i=0;i<m;i++)
    28     {
    29         printf("请输入第%d个边的两个顶点和权值:",i+1);
    30         scanf("%d%d%d",&a,&b,&c);
    31         e[a][b]=c;    
    32     }
    33 
    34     //Floyd算法核心语句
    35     for(int k=0;k<n;k++)
    36     {
    37         for(int i=0;i<n;i++)
    38         {
    39             for(int j=0;j<n;j++)
    40             {
    41                 if(e[i][j]>e[i][k]+e[k][j])
    42                 {
    43                     e[i][j]=e[i][k]+e[k][j];
    44                 }
    45             }
    46         }
    47     }
    48 
    49     for (int i = 0; i < n; ++i)
    50     {
    51         for (int j = 0; j < n; ++j)
    52         {
    53             printf("%10d",e[i][j]);
    54         }
    55         printf("
    ");
    56     }
    57 
    58     return 0;
    59 }

    运行结果为:

  • 相关阅读:
    Wannafly挑战赛9
    acm之图论基础
    Codeforces Round #459 (Div. 2)
    Codeforces Round #460 (Div. 2)
    浙南联合训练赛20180129
    AtCoder Regular Contest 090
    牛客练习赛11
    2018年1月26日天梯赛练习1
    csa Round #66 (Div. 2 only)
    EOJ Monthly 2018.1
  • 原文地址:https://www.cnblogs.com/flypie/p/4996015.html
Copyright © 2011-2022 走看看