数据结构--*最短路径--*floyd算法

发表于

#i nclude<iostream.h>
#i nclude<cstdlib>
#define vex 3//定义结点的个数
#define max 10000//设定一个极大值
int main()
{
int D[vex][vex][vex];//定义一个三维数组,用来一次一次的迭代,按FLOYD算法求出结点之间的最短路径
int arcs[vex][vex]={0,4,11,6,0,2,3,max,0};//邻接矩阵
int i,j,k;
for(i=0;i<vex;i++)
for(j=0;j<vex;j++)
D[-1][j]=arcs[j];//为了使下边算法顺利进行,对数组之前内存空间进行初始化
for(k=0;k<vex;k++)
for(i=0;i<vex;i++)
for(j=0;j<vex;j++)
if(D[k-1][j]<D[k-1][k]+D[k-1][k][j])
D[k][j]=D[k-1][j];
else
D[k][j]=D[k-1][k]+D[k-1][k][j];//求出每次迭代最小值,最后一次即为两个顶点之间的最短路径
for(i=0;i<vex;i++)
{
for(j=0;j<vex;j++)
cout<<arcs[j]<<" ";
cout<<endl;
}//打印邻接矩阵
cout<<endl;
for(i=0;i<vex;i++)
{
for(j=0;j<vex;j++)
cout<<D[vex-1][j]<<" ";//打印最短路径
cout<<endl;
}
system("pause");
return 0;
}

蓝色水滴(游客)发表评论于2006-1-10 15:13:34
为什么数据计算可在 同一矩阵内完成?
将计算的数据同时存放在同一个矩阵内,为什么不破坏数据的正确性?
求教!!!!!
以下为blog主人的回复:
本来我们的数据都是以2维矩阵的形式存放的,但这里的矩阵是3维的,可能你没注意,其中有一维(第0维)是用来保存旧的数据的啊,呵呵

小紫(游客)发表评论于2006-1-6 9:32:21
不是很明白的说!为什么只有几个顶点!

以下为blog主人的回复:
不管几个,都是自己定义的,可以根据自己需要来修改,计算机是不能处理我们认为的无穷量的哦,只是可以去模拟的很接近罢了