多源最短路(floyd算法)

Floyd适用无向图和有向图,不适用于带负权的图  

#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
int n , m;
int a[105][105];
const int inf = 999999;
int main(void)
{
    int from , to , val;
    scanf("%d %d" , &n , &m);
    for(int i = 1 ; i <= n ; i ++)
    {
        for(int j = 1 ; j <= n ; j ++)
        {
            if(i == j)
                a[i][j] = 0;
            else
                a[i][j] = inf;
        }
    }//对图进行初始化
    for(int i = 1 ; i <= m ; i ++)
    {
        scanf("%d %d %d",&from,&to,&val);
        a[from][to] = val;
    }输入边权值

    //floyd核心算法
    for(int k = 1 ; k <= n ; k ++)
    {
        for(int i = 1 ; i <= n ; i ++)
        {
            for(int j = 1 ; j <= n ; j ++)
            {
                if(a[i][j] > a[i][k] + a[k][j])
                    a[i][j] = a[i][k] + a[k][j];
            }
        }
    }
    //输出图(任意两点的最短距离)
    for(int i = 1 ; i <= n ; i++)
    {
        for(int j = 1 ; j <= n ; j ++)
        {
            printf("%10d",a[i][j]);
        }
        cout<<endl;
    }

}

丢一组测试数据:

4 8

1 2 2

1 3 6

1 4 4

2 3 3

3 1 7

3 4 1

4 1 5

4 3 12

猜你喜欢

转载自blog.csdn.net/Zenith_Habitant/article/details/82909594