本文實(shí)例講述了C++實(shí)現(xiàn)多源最短路徑之Floyd算法。分享給大家供大家參考,具體如下:
#include<cstdio>#include<cstring>#include<iostream>#define MAX 999using namespace std;int n,m;int e[MAX][MAX];void Init(){ for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) { if(i==j) e[i][j]=0; else e[i][j]=MAX; }}void Input(){ int a,b,c; for(int i=1; i<=m; ++i) { cin>>a>>b>>c; e[a][b]=c; }}void Floyd(){ for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if(e[i][j]>e[i][k]+e[k][j]) e[i][j]=e[i][k]+e[k][j];}void Output(){ for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) cout<<"dis["<<i<<"]["<<j<<"] = "<<e[i][j]<<endl;}int main(){ while(1) { cout<<"n"<<endl;//頂點(diǎn)個(gè)數(shù) cin>>n; if(!n) break; cout<<"m"<<endl;//邊的個(gè)數(shù) cin>>m; Init(); Input(); Floyd(); Output(); }}Floyd算法是求多點(diǎn)最短路徑的一種算法,其核心代碼為
void Floyd(){ for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if(e[i][j]>e[i][k]+e[k][j]) e[i][j]=e[i][k]+e[k][j];}希望本文所述對大家C++程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答