书本算法3.3 P64
时间复杂度
需要注意一点的是:
还有一个叫做Dijkstra的单元最短路径算法(贪心),是单独求图中某两个点的最短路径,而不是像Floyd算法(DP),是求出任意两点的最短路径。
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
#include<algorithm>
using namespace std;
const int INF=99999;
int W[5][5]={
{0,1,INF,1,5},
{9,0,3,2,INF},
{INF,INF,0,4,INF},
{INF,INF,2,0,3},
{3,INF,INF,INF,0}
};
int D[5][5];
void floyd(int n,int D[][5])
{
for(int k=0;k<n;k++)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
D[i][j]=min(D[i][j],D[i][k]+D[k][j]);
}
}
}
}
int main()
{
memcpy(D,W,sizeof(int)*25);
int n=5;
floyd(n,D);
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cout<<D[i][j]<<" ";
}
cout<<endl;
}
return 0;
}