文章目录

  • 源码
  • 输出
  • 狄杰斯特拉算法
  • 适用范围:没有负权重的图, 可以有环,有向无向图均可
  • 求解问题:单源最短路径
  • 时间复杂度:V^2

源码

#include <iostream>
#include <vector>
#include <algorithm>
#include <chrono>using namespace std;struct Edge {int to;int weight;
};struct Vertex {vector<Edge> adjacent;int dis = INT_MAX;int closed = 0;int pre = -1;
};class Graph {vector<Vertex> nodes;int n;public:Graph(int n, vector<vector<int>> &edges) : nodes(n) {this->n = n;for (auto &vec: edges) {int from = vec[0];int to = vec[1];int weight = vec[2];nodes[from].adjacent.push_back({.to = to, .weight = weight});}}[[nodiscard]] int Vex() const {return n;}vector<Edge> &getEdges(int v) {return nodes[v].adjacent;}void setClosed(int v) {nodes[v].closed = 1;}[[nodiscard]] bool isClosed(int v) const {return nodes[v].closed;}void setDistance(int v, int d) {nodes[v].dis = d;}int getDistance(int v) {return nodes[v].dis;}void setPre(int v, int pre) {nodes[v].pre = pre;}int getPre(int v) {return nodes[v].pre;}
};/***  狄杰斯特拉算法*  适用范围:没有负权重的图, 可以有环,有向无向图均可*  求解问题:单源最短路径*  时间复杂度:V^2*** **/class Dijkstra {public:int start;Graph *g;Dijkstra(int start, Graph *g) : start(start), g(g) {}void print(int v) const {if (g->getPre(v) != -1) {print(g->getPre(v));}cout << v << "\t";}void print() const {for (int i = 0; i < g->Vex(); i++) {cout << i << " node:[from 0 path]" << "\t";print(i);cout << endl;}}void traversal() const {g->setDistance(start, 0);for (int k = 0; k < g->Vex(); k++) {// 在open list 里面找一个最小的int v = -1;for (int i = 0; i < g->Vex(); i++) {if (g->isClosed(i) || g->getDistance(i) == INT_MAX) {continue;}if (v == -1 || g->getDistance(i) < g->getDistance(v)) {v = i;}}// open list 找不到节点if (-1 == v) {break;}// 添加到close listg->setClosed(v);for (auto &adj: g->getEdges(v)) {int to = adj.to;int weight = adj.weight;int distance = g->getDistance(v) + weight;if (g->isClosed(to)) {continue;}if (g->getDistance(to) > distance) {g->setDistance(to, distance);g->setPre(to, v);}}}print();}
};int main() {vector<vector<int>> data = {{0, 1, 2},{1, 2, 2},{2, 3, 1},{3, 4, 2},{0, 4, 3},};auto g = new Graph(5, data);Dijkstra dj(0, g);dj.traversal();
}

输出

c++ 单源最短路径-狄杰斯特拉算法
c++ 单源最短路径-狄杰斯特拉算法
c++ 单源最短路径-狄杰斯特拉算法
c++ 单源最短路径-狄杰斯特拉算法
c++ 单源最短路径-狄杰斯特拉算法
c++ 单源最短路径-狄杰斯特拉算法
c++ 单源最短路径-狄杰斯特拉算法
c++ 单源最短路径-狄杰斯特拉算法
c++ 单源最短路径-狄杰斯特拉算法
c++ 单源最短路径-狄杰斯特拉算法
c++ 单源最短路径-狄杰斯特拉算法
c++ 单源最短路径-狄杰斯特拉算法

c++ 单源最短路径-狄杰斯特拉算法相关推荐

  1. 最短路径算法---狄杰斯特拉算法

    最短路径算法-狄杰斯特拉算法 一.介绍 这是一种按照路径长度递增的次序产生最短路径的算法,采用的是贪心的思想,对带权图(有向和无向均可)寻找最短路径;该算法对于不含负权的网来说,是目前已知的最快的单源 ...

  2. VC++2012编程演练数据结构《31》狄杰斯特拉算法

    狄杰斯特拉算法 Dijkstra(狄杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法是很 ...

  3. >算法笔记-动态规划-最短路径迪杰斯特拉算法

    算法笔记-动态规划-最短路径迪杰斯特拉算法 作者:星河滚烫兮 前言   图的最短路径问题在现实生活中有很广阔的应用,最短路径又分为单源最短路径与多源最短路径,前者求出固定起点到其他节点的最短路径,后者 ...

  4. C++狄杰斯特拉算法(Dijkstra)实现最短路问题

    狄杰斯特拉算法(Dijkstra): 基本思想: 看不懂?没关系,i哲来带你通过具体问题理解这个算法 问题描述: 找出从商家到学校的最短路径 多组输入,对于每组数据. 第一行输入N,M,分别表示大街上 ...

  5. 狄杰斯特拉算法 vs A_star 算法

    杂谈 狄杰斯特拉算法(以下简称为D 算法)和A* 算法,网上的学习资料很多,在此不在赘述.以下做出几点总结: 1.D 算法 是可以可以获取一个全局最优解. 2.但是A* 算法 只有在 启发代价h &l ...

  6. 算法图解---狄杰斯特拉算法(原理+代码)

    要编写解决这个问题的代码,需要三个散列表. 随着算法的进行,你将不断更新散列表costs和parents.首先,需要实现这个图,为此可像第6章那样使用一个散列表,样将节点的所有邻居都存储在散列表中.但 ...

  7. 单源最短路径的迪克斯特拉(Dijkstra)算法

    Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点(节点需为源点)到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展 ...

  8. 最短路径迪杰斯特拉算法--邻接矩阵

    一.算法介绍 迪杰斯特拉算法(解决单源最短路径) 基本思想:每次找到离源点(如1号节点)最近的一个顶点,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径. 基本步骤:1,设置标记数组bo ...

  9. 单源最短路径问题(dijkstra算法)

    一.问题描述 给定一个随机带权有向图,每条边的权是一个实数.另外给定图中一个顶点,称为源.计算源到各顶点的最短路径长度(即距离),要求能随机生成图,随机指定源点计算出到顶点的最短距离. 二.解题思路 ...

最新文章

  1. MSP430低功耗模式-while循环失效
  2. 实现nginx上配置免费证书Let's Encrypt
  3. 完美解决:You are using pip version 9.0.1, however version 18.0 is available.
  4. 英国脱欧但网络安全领域重视未减
  5. MongoError: topology was destroyed解决方法
  6. JDK5.0 特性-线程任务执行架构 ScheduledExecutorService
  7. Matlab图像处理创新实践-实验1【图像滤波基础(1)】
  8. C++描述杭电OJ 2014. 青年歌手大奖赛_评委会打分 ||
  9. 论文浅尝 | 利用多语言 wordnet 上随机游走实现双语 embeddings
  10. Java 混淆那些事(五):ProGuard 其他的选项
  11. 作为开发人员,U盘32G太小了,256G才够用
  12. 【Android TV 开发】-->开发汇总
  13. Moore-Penrose伪逆(Moore-Penrose广义逆)
  14. 面试技巧 16个经典面试问题回答思路
  15. 信息学奥赛一本通:1153:绝对素数
  16. 常见前端安全漏洞及防范方法
  17. LeNet5—论文及源码阅读
  18. 阿里巴巴云原生网关三位一体的选择与实践
  19. 这篇文章来自我的微信朋友圈,并不特别好玩,但可以给创业者补点财务知识
  20. 航天信息a3连接不上服务器,航天信息睿财A3使用说明

热门文章

  1. 【五星级资源】主题模板站整站打包开源+数据库,完美分享助大家建站!
  2. 禁止Docker使用iptables防火墙改为使用Firewalld
  3. 如何使用硬盘格式化恢复软件恢复数据?
  4. 河工大大一c语言题库,河工大二级C语言题库.doc
  5. 清华大学:人脸识别技术爆出巨大丑闻!
  6. 揭秘游戏外挂开发技术(一)
  7. linux系统拷贝文件到桌面,centos拷贝文件夹命令
  8. 加入2b2t服务器显示过期,我的世界:2B2T服务器罪魁祸首是他,为一己之私毁掉了整个服务器...
  9. (sketch to image) 论文阅读笔记 SketchyCOCO:Image Generation from Freehand Scene Sketches
  10. 软件测试 | 期末复习——测试基础【黑盒测试用例设计】