C++實現(xiàn)多源最短路徑之Floyd算法示例
本文實例講述了C++實現(xiàn)多源最短路徑之Floyd算法。分享給大家供大家參考,具體如下:
#include<cstdio>
#include<cstring>
#include<iostream>
#define MAX 999
using 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;//頂點個數(shù)
cin>>n;
if(!n) break;
cout<<"m"<<endl;//邊的個數(shù)
cin>>m;
Init();
Input();
Floyd();
Output();
}
}
Floyd算法是求多點最短路徑的一種算法,其核心代碼為
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è)計有所幫助。
相關(guān)文章
windows上配置vscode?C/C++代碼跳轉(zhuǎn)的實現(xiàn)
C/C++官方的C/C++插件,必備的插件,是代碼跳轉(zhuǎn)、自動補全、代碼大綱顯示等功能的基礎(chǔ),本文主要介紹了windows上配置vscode?C/C++代碼跳轉(zhuǎn),感興趣的可以了解一下2023-09-09
如何在Qt中實現(xiàn)關(guān)于Json?的操作
JSON是一種輕量級數(shù)據(jù)交換格式,常用于客戶端和服務(wù)端的數(shù)據(jù)交互,不依賴于編程語言,在很多編程語言中都可以使用JSON,這篇文章主要介紹了在Qt中實現(xiàn)關(guān)于Json的操作,需要的朋友可以參考下2023-08-08
C語言中字符串常用函數(shù)strcat與strcpy的用法介紹
以下是對C語言中字符串常用函數(shù)strcat與strcpy的使用方法進行了詳細的分析介紹,需要的朋友可以參考下2013-07-07
解析在main函數(shù)之前調(diào)用函數(shù)以及對設(shè)計的作用詳解
本篇文章是對在main函數(shù)之前調(diào)用函數(shù)以及對設(shè)計的作用進行了詳細的分析介紹,需要的朋友參考下2013-05-05
C++ 中"emplace_back" 與 "push_back" 的區(qū)別
這篇文章主要介紹了C++ 中"emplace_back" 與 "push_back" 的區(qū)別的相關(guān)資料,需要的朋友可以參考下2017-04-04
Qt基礎(chǔ)開發(fā)之QString與QByteArray詳細用法與區(qū)別及QString QByteArray互轉(zhuǎn)
這篇文章主要介紹了Qt基礎(chǔ)開發(fā)之QString與QByteArray詳細用法與區(qū)別及QString QByteArray互轉(zhuǎn),需要的朋友可以參考下2020-03-03

