最短路径Dijkstra算法源码
来源:互联网 发布:linux udp客户端程序 编辑:程序博客网 时间:2024/06/05 06:36
Dijkstra算法源码
Dijkstra.h文件源码
#pragma once#include "stdafx.h"#include <vector>using namespace std;//arcs中arcs[i][j] < 0,表示不可达class Dijkstra{private: int _num; float** _arcs; float* _dis; int* _pre; bool* _used;public: Dijkstra(float** arcs, int num); void Dijkstra::FindPath(int s, int t, vector<int>& route,float& pathLen);};
Dijkstra.cpp源码
#include "stdafx.h"#include "Dijkstra.h"#include <limits> Dijkstra::Dijkstra(float** arcs, int num){ this->_arcs = arcs; this->_num = num; this->_dis = new float[num]; this->_pre = new int[num]; this->_used = new bool[num];}//最短路径Dijkstra算法,从s索引到t索引寻最短路径,索引从0开始void Dijkstra::FindPath(int s, int t, vector<int>& route,float& pathLen){ int i, j; route.clear(); pathLen = 0; float floatMax = (numeric_limits<float>::max)(); for (i = 0; i < _num; i++) { _dis[i] = floatMax; _pre[i] = -1; _used[i] = false; } //初始化起点的最短路径 _dis[s] = 0; _pre[s] = -1; for (j = 0; j < _num; j++) { //找到当前路径中值最小作为下次的起点 s = -1; for (i = 0; i < _num; i++) { if (_used[i] == false && (s == -1 || _dis[i] < _dis[s])) { s = i; } } _used[s] = true; if (s == t) { break; } for (i = 0; i < _num; i++) { if (_used[i] == false && _arcs[s][i] >= 0 && _dis[s] + _arcs[s][i] < _dis[i]) { _dis[i] = _dis[s] + _arcs[s][i]; _pre[i] = s; } } } if (_dis[t] < floatMax) { pathLen +=_dis[t]; //获得路径 int now = t; while (now != -1) { route.insert(route.begin(), now); now = _pre[now]; } }}
TestDijkstra.h
#pragma once#include "stdafx.h"#include "Dijkstra.h"#include <iostream>using namespace std;class TestDijkstra{public: void DoTest() { float arcsArr[5][5] = { {0, 8, -1, -1, 2}, {8, 0, 2, 0, 6}, {-1, 2, 0, 3, 3}, {-1, -1, 3, 0, 4}, {2, 6, 3, 4, 0}}; float** arcs = new float*[5]; for(int i=0;i<5;i++) { arcs[i] = &arcsArr[i][0]; } Dijkstra* dijkstra = new Dijkstra(arcs, 5); vector<int> path1; float len1; dijkstra->FindPath(0, 1, path1, len1); cout<<"0->1 "<< len1 << endl; vector<int> path2; float len2; dijkstra->FindPath(3, 0, path2, len2); cout <<"3->0 " << len2 << endl; }};
0 0
- 最短路径Dijkstra算法源码
- DIJKSTRA最短路径算法
- 最短路径算法-dijkstra
- dijkstra最短路径算法
- 最短路径 Dijkstra算法
- 最短路径(Dijkstra算法)
- 最短路径Dijkstra算法
- 最短路径 Dijkstra算法
- Dijkstra最短路径算法
- 最短路径dijkstra算法
- 最短路径 dijkstra算法
- 最短路径Dijkstra 算法
- 最短路径 (Dijkstra算法)
- Dijkstra最短路径算法
- 最短路径(Dijkstra算法)
- 最短路径--Dijkstra算法
- Dijkstra最短路径算法
- Dijkstra最短路径算法
- JS怎么把字符串数组转换成整型数组
- Swift: API 可用性检查
- Android中的单位和尺寸(dp、sp)
- EMAP上传附件
- jdk中用到的23中经典的设计模式
- 最短路径Dijkstra算法源码
- 剪切板操作示例
- Centos 6/ 7下通过yum安装php7环境
- shell-判断式
- 【项目管理和构建】—— Maven简介(一)
- ios 图片处理( 1.按比例缩放 2.指定宽度按比例缩放)
- 广播包里加MAC地址
- Redis的基本操作
- ubuntu设置root密码及 Xftp连接linux(ubuntu)时提示ssh服务器拒绝了密码,请再试一次