多源点最短路径问题

萝らか妹 提交于 2019-11-27 02:08:03

问题描述:
给定带权又向图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];
       }
     }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!