C++实现dijkstra单源最短路径
代码如下:
#include <iostream>
using namespace std;
const int N = 30;
typedef char ElemType;
const double noEdge = 99999;class Graph
{private:double G[N][N];int vertexN, edgeN;double dist[N];bool vis[N];int path[N];int sv;ElemType data[N];int findMinDist(){double minDist = noEdge;int v = -1;for (int i = 0; i < vertexN; i++){if (!vis[i] && dist[i] < minDist){minDist = dist[i];v = i;}}return v;}public :Graph(){for (int i = 0; i < N; i++){for (int j = 0; j < N; j++){G[i][j] = noEdge;}}cout << "vertexN = ? and edgeN = ?" << endl;cin >> vertexN >> edgeN;for (int i = 0; i < vertexN; i++){cin >> data[i];}cout << "Please input information of edge(including weight)" << endl;for (int i = 0; i < edgeN; i++){int v1, v2;double w;cin >> v1 >> v2 >> w;G[v1][v2] = w;}}bool dijkstra(int s){sv = s;for (int i = 0; i < vertexN; i++){dist[i] = G[s][i];if (dist[i] < noEdge){path[i] = s;}else{path[i] = -1;}vis[i] = false;}dist[s] = 0;vis[s] = true;while (true){int v = findMinDist();if (v == -1) break;vis[v] = true;for (int w = 0; w < vertexN; w++){if (!vis[w] && G[v][w] < noEdge)if (G[v][w] < 0) return false;if (dist[w] > dist[v] + G[v][w]){dist[w] = dist[v] + G[v][w];path[w] = v;}}}return true;}void printPath(int o){cout << "value = " << dist[o] << endl;if (dist[o] < noEdge){while (path[o] != sv){cout << data[o] << " <- " << data[path[o]] << endl;o = path[o];}cout << data[o] << " <- " << data[path[o]] << endl;}else{cout << "The road is death" << endl;}}};int main()
{Graph g;int s;cin >> s;g.dijkstra(s);int o;cin >> o;g.printPath(o);return 0;
}
测试如下:
C++实现dijkstra单源最短路径相关推荐
- C++实现dijkstra单源最短路径算法-邻接表+优先队列
dijkstra单源最短路径算法不允许边权值为负,适用的图范围可以很大. 代码如下: #include <iostream> #include <queue> #include ...
- Dijkstra单源最短路径算法
这里写目录标题 一.算法原理 二.MATLAB实现 三.参考文献 一.算法原理 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶 ...
- Dijkstra 单源最短路径算法 Java实现
Dijkstra 单源最短路径算法 Java实现 算法导入 算法核心 复杂度分析 时间复杂度 空间复杂度 代码实现 参考资料 结尾 算法导入 在图论中,求最短路径有一个经典的算法 Dijkstra算法 ...
- 数据结构(十五)dijkstra单源最短路径
1 算法原理 假设图中有顶点V={A,B,C,D,E,F},我们要求取A到其他顶点的最短距离.假设我们要求取定点A到其它顶点的最短路径,先把顶点A到源的距离设置为0,其他的距离设置为无穷大.准备两个集 ...
- C++实现有向图最短路径-Dijkstra单源最短路径算法
#include <iostream> using namespace std; #define INFINE 99999999//假装我是无穷大 const int N = 1010; ...
- Dijkstra 求单源最短路径
#include "stdafx.h" #include <iostream> using namespace std ;#include <vector> ...
- 单源路径分支界限java_java单源最短路径算法
. .. .. . 单源最短路径的 Dijkstra 算法: 问题描述: 给定一... 并 应用贪心法求解单源最短路径问题.环境要求对于环境没有特别要求.对于算法实现,可以自由选择 C, C++, J ...
- 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...
问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...
- 【算法】【ACM】深入理解Dijkstra算法(单源最短路径算法)
Dijkstra算法是用来求解从某个源点到其他各顶点的最短路径(单源最短路径). 下面的Dijkstra算法的讲解都是基于这个有向图,在遇到其他问题可以类比. 算法的基本思想: 把图中的定点分成两组, ...
最新文章
- ubuntu 16.04 更换国内源(下载源)(阿里源)(换源)
- java 僵尸进程_孤儿进程与僵尸进程
- EF架构~为IEnumerable接口添加增删查等操作,原因是IEnumerable导航属性更放心
- boost::foreach模块非常量右值的测试程序
- 计算机英语笑话,关于计算机的幽默笑话
- 判断大小_美人计 | 学会这招大小骨架判断法,我知道自己不是胖了
- Fedora 10下应用网络模拟器NS心得
- “假冒上市”公司再甩锅:我被服务商给骗了
- Android仿人人客户端(v5.7.1)——点击左侧菜单栏中的Item切换视图
- 基于Redis的三种分布式爬虫策略
- Lost Found
- 为什么float只有四个字节,存储范围却大于有八个字节的long类型?
- 怎样用计算机制作思维导图,手把手教你如何用电脑绘制思维导图
- java九宫格案例讲解_Java实现九宫格的教程详解
- 饥荒服务器物品指令,饥荒控制台指令大全物品大全服务器管理命令大全.docx
- 计算机主机电源灯不亮,电脑主机开不了机、电源灯不亮解决方法与技巧
- 【转】微信小程序实现自动化测试
- 计算机or笔记本,笔记本or台式机 这几款戴尔主机性能上没得挑
- (转)给想立志入行网络或已经初入行的朋友的建议
- 网络软件-管理网络设备和组件
热门文章
- Android之解决VideoView控件的进度条位置摆放问题和打开播放黑屏问题
- Git之HEAD和origin
- C和指针之字符串编程练习6
- java多进程、多线程讲解
- Android之滑动事件冲突解决 Touch事件处理机制总结
- 关于在Windows下AndroidStudio.使用React-Native开发android报错红屏“run react-native start”解决
- 活照片 android,活照片app安卓
- 沃罗诺伊图是怎样的?
- 堪称经典!这部由苏联最杰出数学家编写的数学教材,为何能大受推崇?
- 2500 万行的代码就问你敢不敢动?!