Dijkstra最短路徑算法實(shí)現(xiàn)代碼
Dijkstra的最短路徑算法是基于前驅(qū)頂點(diǎn)的最短路徑計(jì)算的,整體上來講還是比較簡(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)頁蜘蛛算法示例)
- 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è)的分析說明。需要的朋友參考下2013-04-04C語言中system()執(zhí)行cmd命令打開關(guān)閉程序的方法
今天小編就為大家分享一篇C語言中system()執(zhí)行cmd命令打開關(guān)閉程序的方法。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05C語言字符函數(shù)isalnum()和iscntrl()詳解
大家好,本篇文章主要講的是C語言字符函數(shù)isalnum()和iscntrl()詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02