Floyd最短路径算法

来源:互联网 发布:结婚日子测算软件 编辑:程序博客网 时间:2024/05/16 11:26

书本算法3.3 P64

D(k)[i][j]=minimum(D(k1)[i][j],D(k1)[i][k])+D(k1)[k][j])

时间复杂度 T(n)=Θ(n3)
需要注意一点的是:
还有一个叫做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;}
1 0
原创粉丝点击