多源点最短路径问题

问题描述:
给定带权又向图G=(V,E),对任意顶点Vi和Vj,求顶点Vi到Vj的最短路径长度?
分析:
Floyd算法代码很简单,但是理解起来有一定的难度。网上有很多解释方法,我自己的思想还没有完全成熟,稍后在作补充。

#include <iostream>

using namespace std;

const int MAXNUM = 999999;
const int MAX =1005;
int cost[MAX][MAX];
int n;

void floyd(int d[MAX][MAX]);

int main()
{
    int i,j,m,a,b,c;
    cin>>n>>m;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            if(i==j)
                cost[i][j] = 0;
            else
                cost[i][j] = MAXNUM;
    }
    for(i=0;i<m;i++)
    {
        cin>>a>>b>>c;
        cost[a][b]=c;
    }
    floyd(cost);
    cout<<"多源点最短路径长度矩阵:"<<endl;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            cout<<cost[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}

void floyd(int d[MAX][MAX])
{
    int i,j,k;

   for(k=0;k<n;k++)
    for(i=0;i<n;i++)
     for(j=0;j<n;j++)
     {
       if(d[i][k]+d[k][j]<d[i][j])
       {
           d[i][j] = d[i][k]+d[k][j];
       }
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值