问题描述:
给定带权又向图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];
}
}
}