代码如下:

#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单源最短路径相关推荐

  1. C++实现dijkstra单源最短路径算法-邻接表+优先队列

    dijkstra单源最短路径算法不允许边权值为负,适用的图范围可以很大. 代码如下: #include <iostream> #include <queue> #include ...

  2. Dijkstra单源最短路径算法

    这里写目录标题 一.算法原理 二.MATLAB实现 三.参考文献 一.算法原理 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶 ...

  3. Dijkstra 单源最短路径算法 Java实现

    Dijkstra 单源最短路径算法 Java实现 算法导入 算法核心 复杂度分析 时间复杂度 空间复杂度 代码实现 参考资料 结尾 算法导入 在图论中,求最短路径有一个经典的算法 Dijkstra算法 ...

  4. 数据结构(十五)dijkstra单源最短路径

    1 算法原理 假设图中有顶点V={A,B,C,D,E,F},我们要求取A到其他顶点的最短距离.假设我们要求取定点A到其它顶点的最短路径,先把顶点A到源的距离设置为0,其他的距离设置为无穷大.准备两个集 ...

  5. C++实现有向图最短路径-Dijkstra单源最短路径算法

    #include <iostream> using namespace std; #define INFINE 99999999//假装我是无穷大 const int N = 1010; ...

  6. Dijkstra 求单源最短路径

    #include "stdafx.h" #include <iostream> using namespace std ;#include <vector> ...

  7. 单源路径分支界限java_java单源最短路径算法

    . .. .. . 单源最短路径的 Dijkstra 算法: 问题描述: 给定一... 并 应用贪心法求解单源最短路径问题.环境要求对于环境没有特别要求.对于算法实现,可以自由选择 C, C++, J ...

  8. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  9. 【算法】【ACM】深入理解Dijkstra算法(单源最短路径算法)

    Dijkstra算法是用来求解从某个源点到其他各顶点的最短路径(单源最短路径). 下面的Dijkstra算法的讲解都是基于这个有向图,在遇到其他问题可以类比. 算法的基本思想: 把图中的定点分成两组, ...

最新文章

  1. ubuntu 16.04 更换国内源(下载源)(阿里源)(换源)
  2. java 僵尸进程_孤儿进程与僵尸进程
  3. EF架构~为IEnumerable接口添加增删查等操作,原因是IEnumerable导航属性更放心
  4. boost::foreach模块非常量右值的测试程序
  5. 计算机英语笑话,关于计算机的幽默笑话
  6. 判断大小_美人计 | 学会这招大小骨架判断法,我知道自己不是胖了
  7. Fedora 10下应用网络模拟器NS心得
  8. “假冒上市”公司再甩锅:我被服务商给骗了
  9. Android仿人人客户端(v5.7.1)——点击左侧菜单栏中的Item切换视图
  10. 基于Redis的三种分布式爬虫策略
  11. Lost Found
  12. 为什么float只有四个字节,存储范围却大于有八个字节的long类型?
  13. 怎样用计算机制作思维导图,手把手教你如何用电脑绘制思维导图
  14. java九宫格案例讲解_Java实现九宫格的教程详解
  15. 饥荒服务器物品指令,饥荒控制台指令大全物品大全服务器管理命令大全.docx
  16. 计算机主机电源灯不亮,电脑主机开不了机、电源灯不亮解决方法与技巧
  17. 【转】微信小程序实现自动化测试
  18. 计算机or笔记本,笔记本or台式机 这几款戴尔主机性能上没得挑
  19. (转)给想立志入行网络或已经初入行的朋友的建议
  20. 网络软件-管理网络设备和组件

热门文章

  1. Android之解决VideoView控件的进度条位置摆放问题和打开播放黑屏问题
  2. Git之HEAD和origin
  3. C和指针之字符串编程练习6
  4. java多进程、多线程讲解
  5. Android之滑动事件冲突解决 Touch事件处理机制总结
  6. 关于在Windows下AndroidStudio.使用React-Native开发android报错红屏“run react-native start”解决
  7. 活照片 android,活照片app安卓
  8. 沃罗诺伊图是怎样的?
  9. 堪称经典!这部由苏联最杰出数学家编写的数学教材,为何能大受推崇?
  10. 2500 万行的代码就问你敢不敢动?!