上一篇博文中讲了Dijkstra算法,这次博文要讲解的是floyd算法,其中Dijkstra算法是属于贪心算法,而floyd算法是动态规划的一个算法:
具体的算法如下:
其中一个矩阵是用来存放最短路径的,另外一个矩阵是用来存放前驱顶点的;
#include <iostream>
using namespace std;
#define Max 5
#define Infinity 65535
void main()
{
int V[Max][Max]={0,8,32,Infinity,Infinity,
12,0,16,15,Infinity,
Infinity,29,0,Infinity,13,
Infinity,21,Infinity,0,7,
Infinity,Infinity,27,19,0
};
int G[Max][Max];
for(int i=0;i<Max;i++)
{
for(int j=0;j<Max;j++)
{
G[i][j]=-1;
}
}
for(int k=0;k<Max;k++)
{
for(int i=0;i<Max;i++)
{
for(int j=0;j<Max;j++)
{
if(V[i][k]+V[k][i]<V[i][j])
{
V[i][j]=V[i][k]+V[k][j];
G[i][j]=k;
}
}
}
}
for(int i=0;i<Max;i++)
{
for(int j=0;j<Max;j++)
{
cout<<V[i][j]<<" ";
}
cout<<endl;
}
for(int i=0;i<Max;i++)
{
for(int j=0;j<Max;j++)
{
cout<<G[i][j]<<" ";
}
cout<<endl;
}
}