Dijkstra最短路徑算法實(shí)現(xiàn)代碼
Dijkstra的最短路徑算法是基于前驅(qū)頂點(diǎn)的最短路徑計(jì)算的,整體上來(lái)講還是比較簡(jiǎn)單的,下面是代碼:
#include <iostream>
#include <vector>
#include <limits>
void shortestpath( const std::vector <std::vector< short> >& paths, int from, std::vector< short>& path){
std:: vector<bool> flags(paths.size(), false);
std:: vector<short> distance(paths.size(), 0);
path.resize(paths.size(), 0);
for(size_t i = 0; i != paths.size(); ++i){
distance[i] = paths[from][i];
}
flags[from] = 1;
int min, pos;
for(size_t i = 1; i != paths.size(); ++i){
pos = -1;
min = std:: numeric_limits<short>::max();
for(size_t j = 0; j != paths.size(); ++j){
if(!flags[j] && distance[j] < min){
min = distance[j];
pos = j;
}
}
if(pos == -1)
break;
flags[pos] = true;
for(size_t j = 0; j != paths.size(); ++j){
if(!flags[j] && paths[pos][j] != 0
&& paths[pos][j] < std::numeric_limits <int>:: max()
&& min+paths[pos][j] < distance[j]){
distance[j] = min + paths[pos][j];
path[j] = pos;
}
}
}
for(size_t i = 0; i != distance.size(); ++i){
std::cout << distance[i] << " " << std::flush;
}
std::cout << std:: endl;
}
int main(){
std::cout << "請(qǐng)輸入頂點(diǎn)數(shù):" << std::flush;
int sum; std::cin >> sum;
std:: vector<std::vector <short> > paths;
for(int i = 0; i != sum; ++i){
paths.push_back(std:: vector<short>(sum, std::numeric_limits< short>::max()));
paths[i][i] = 0;
}
std::cout << "請(qǐng)輸入邊數(shù):" << std::flush;
std::cin >> sum;
int vi, vj, weight;
for(int i = 0; i != sum; ++i){
std::cin >> vi >> vj >> weight;
paths[vi][vj] = weight;
paths[vj][vi] = weight;
}
std:: vector<short> path;
shortestpath(paths, 0, path);
std::cout << "最近路徑結(jié)果為:" << std::flush;
for(size_t i = 0; i != path.size(); ++i){
std::cout << path[i] << " " << std::flush;
}
std::cout << std:: endl;
return 0;
}
- 基于Java實(shí)現(xiàn)的圖的廣度優(yōu)先遍歷算法
- java加密算法分享(rsa解密、對(duì)稱加密、md5加密)
- java分析html算法(java網(wǎng)頁(yè)蜘蛛算法示例)
- JAVA算法起步之插入排序?qū)嵗?/a>
- JAVA算法起步之堆排序?qū)嵗?/a>
- JAVA算法起步之快速排序?qū)嵗?/a>
- java數(shù)據(jù)結(jié)構(gòu)和算法學(xué)習(xí)之漢諾塔示例
- java不可逆加密算法之md5加密算法使用示例
- 快速排序算法原理及java遞歸實(shí)現(xiàn)
- 冒泡排序算法原理及JAVA實(shí)現(xiàn)代碼
- JAVA簡(jiǎn)單選擇排序算法原理及實(shí)現(xiàn)
- 基于Java實(shí)現(xiàn)的Dijkstra算法示例
相關(guān)文章
C++中關(guān)于Crt的內(nèi)存泄漏檢測(cè)的分析介紹
本篇文章介紹了,在C++中關(guān)于Crt的內(nèi)存泄漏檢測(cè)的分析說(shuō)明。需要的朋友參考下2013-04-04C語(yǔ)言簡(jiǎn)易實(shí)現(xiàn)掃雷小游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言簡(jiǎn)易實(shí)現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10C語(yǔ)言中system()執(zhí)行cmd命令打開(kāi)關(guān)閉程序的方法
今天小編就為大家分享一篇C語(yǔ)言中system()執(zhí)行cmd命令打開(kāi)關(guān)閉程序的方法。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05C語(yǔ)言字符函數(shù)isalnum()和iscntrl()詳解
大家好,本篇文章主要講的是C語(yǔ)言字符函數(shù)isalnum()和iscntrl()詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02C語(yǔ)言中sizeof函數(shù)的基本使用總結(jié)
這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中sizeof函數(shù)的基本使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03C++ 在堆上開(kāi)辟與釋放二維、三維指針詳細(xì)解析
一維指針其實(shí)就相當(dāng)于一維數(shù)組,不用去看書上所說(shuō)的數(shù)組在內(nèi)存中的首地址這些晦澀的話,以此類推 二維指針就相當(dāng)于二維數(shù)組,新手對(duì)一維數(shù)組的開(kāi)辟與釋放比較容易熟悉2013-09-09