上一篇博文中讲了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; } }
原文地址:http://blog.csdn.net/daida2008/article/details/39546381