多源最短路径之Floyd算法

本文详细介绍了一种用于解决多点最短路径问题的经典算法——Floyd算法,并提供了完整的C++实现代码。通过三个主要步骤:初始化、输入边权重及运行Floyd核心算法,实现了任意两点间的最短路径计算。

#include<cstdio>
#include<cstring>
#include<iostream>
#define MAX 999
using namespace std;
int n,m;
int e[MAX][MAX];
void Init()
{
    for(int i=1; i<=n; ++i)
        for(int j=1; j<=n; ++j)
        {
            if(i==j)
                e[i][j]=0;
            else
                e[i][j]=MAX;
        }
}
void Input()
{
    int a,b,c;
    for(int i=1; i<=m; ++i)
    {
        cin>>a>>b>>c;
        e[a][b]=c;
    }
}
void Floyd()
{
    for(int k=1; k<=n; k++)
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                if(e[i][j]>e[i][k]+e[k][j])
                    e[i][j]=e[i][k]+e[k][j];
}
void Output()
{
    for(int i=1; i<=n; ++i)
        for(int j=1; j<=n; ++j)
            cout<<"dis["<<i<<"]["<<j<<"] = "<<e[i][j]<<endl;
}
int main()
{
    while(1)
    {
        cout<<"n"<<endl;//顶点个数
        cin>>n;
        if(!n) break;
        cout<<"m"<<endl;//边的个数
        cin>>m;

        Init();

        Input();

        Floyd();
        Output();
    }
}





Floyd算法是求多点最短路径的一种算法,其核心代码为

void Floyd()
{
    for(int k=1; k<=n; k++)
        for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
                if(e[i][j]>e[i][k]+e[k][j])
                    e[i][j]=e[i][k]+e[k][j];
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值