整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路。(不像SPFA,玄学复杂度)
但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂。

dij算法(采用方法邻接表+优先队列优化)复杂度O(mn)降为O(mlogn)
不多哔哔,我们直接看图解:
核心:每次去往距离起点最近的那个点,并且是第一次访问
图中用黄色来标记哪些点已经走过。

之前刷过几个dij的图论题,有兴趣的可以去我的博客看一下图论刷水题记录(一)(最短路-----dijkstra算法)
本来没打算写这个算法详解,但是上导论课的时候老师提到过,还要做作业,所以要写就写的详细一点吧,直接用老师的图来进行说明

手动模拟一下算法过程:
1.我们设置一个数组dis[20]用来储存到达该点距离的最小值(实时状态),并且初始化他们的值为无穷大。
2.从起点出发,标记起点,因为自己到自己的距离为0,所以v1->v1=0,更新v1的临边,更新好后如图所示:
3.找到距离起点最近的点(如下图),并且更新他的临边,我们发现从此点到上方的点距离要小于之前更新过的值,故我们将7更新为6,并将此点右边的点更新为5.
4.我们继续进行上述操作,找到距离起点最近的点,标记为走过,更新他的临边,我们发现从此点到他左上方的点要比之前更新过的值小,故将左上方点更新为8,并将他上方和右上方的点分别更新为16和14
5.继续在未走过的点中寻找距离起点最短的点,发现是6,将其标记为走过,我们发现它可以往正上方去走,但是问题是8小于5+6,所谓不更新该点
6.找到距离起点最短的点,标记该点,发现它可以去他右边这个点,并且8+5小于16,所以更新该点的值为13.
7.找到距离起点最短的点,标记该点,发现没有可以更新的点。

8.找到距离起点最短的点,标记该点,发现没有可以更新的点。
全图点均已标记算法结束
经过以上的步骤,我们可以求出所有的点距离起点的最短路

ps(外带一个用邻接表+优先队列优化过的程序)

#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <math.h>
#include <string>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <stdlib.h>
#include <vector>
#define maxn  2010
//#define true false
//#define false true
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
const double pi = acos(-1);
typedef long long ll;
const int mod = 1e9 + 7;
using namespace std;int t,n;
bool visited[maxn];
int dis[maxn];struct wazxy{int v,val;wazxy(int v1,int e1){v=v1;val=e1;}
};
vector<wazxy> a[maxn];
struct node{int id,dis;node(int a,int b){id=a,dis=b;}bool operator < (const node & a)const{return dis>a.dis;}
};void dij(){int s=1;dis[s]=0;priority_queue<node>q;q.push(node(s,dis[s]));while(!q.empty()){node temp=q.top();q.pop();if(visited[temp.id])  continue;visited[temp.id]=true;for(int i=0;i<a[temp.id].size();i++){wazxy node1=a[temp.id][i];if(visited[node1.v]) continue;if(dis[node1.v]>node1.val+temp.dis){dis[node1.v]=node1.val+temp.dis;q.push(node(node1.v,dis[node1.v]));}}}printf("%d",dis[n]);
}int main()
{cin>>t>>n;memset(visited,false,sizeof(visited));memset(dis,MaxN,sizeof(dis));while(t--){int x,y,v;scanf("%d%d%d",&x,&y,&v);a[x].push_back(wazxy(y,v));}dij();return 0;
}

图论-最短路Dijkstra算法详解超详 有图解相关推荐

  1. 图论 —— 最短路 —— Dijkstra 算法

    [概述] Dijkstra 算法是单源最短路径算法,即计算起点只有一个的情况到其他点的最短路径,其无法处理存在负边权的情况. 其时间复杂度是:O(E+VlogV) [算法分析] 将点分为两类,一类是已 ...

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

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

  3. 单源最短路 Dijkstra算法 和 SPFA算法

    单源最短路 •从一个点出发,到达其他顶点的最短路径的长度. •基本操作:松弛 •d[u]+map[u, v]< d[v]这样的边(u,v)称为紧的(tense),可以对它进行松弛(relax): ...

  4. Java 泛型详解(超详细的java泛型方法解析)

    Java 泛型详解(超详细的java泛型方法解析) 1. 什么是泛型 泛型:是一种把明确类型的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型.也就是说在泛型使用过程中,操作的数据类型被指定为 ...

  5. 深度学习网络模型——Vision Transformer详解 VIT详解

    深度学习网络模型--Vision Transformer详解 VIT详解 通用深度学习网络效果改进调参训练公司自己的数据集,训练步骤记录: 代码实现version-Transformer网络各个流程, ...

  6. 最短路dijkstra算法详解_图论系列开始填坑--Dijkstra,单源最短路

    暑假只有最开始的几天最有意思,考完试玩了几天就感觉到了无聊.抱着想要出去走走的心态,我制定了一个出行路线图,我在1号城市,想去看一看2,3,4,5号城市(每去一个城市都从1号城市出发),一切准备就绪, ...

  7. 最短路dijkstra算法详解_最短路径问题---Dijkstra算法详解

    1.Dijkstra算法介绍 · 算法起源: · Djkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家E ...

  8. 广告行业中那些趣事系列60:详解超好用的无监督关键词提取算法Keybert

    导读:本文是"数据拾光者"专栏的第六十篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践.本篇从理论到实践介绍了超好用的无监督关键词提取算法Keybert,对于希望使用无 ...

  9. 2019中山纪念中学夏令营-Day14 图论初步【dijkstra算法求最短路】

    Dijkstra是我学会的第一个最短路算法,为什么不先去学SPFA呢?因为我在luogu上翻到了一张比较神奇的图: 关于SPFA -它死了 以及网上还有各位大佬的经验告诉我:SPFA这玩意很容易被卡. ...

最新文章

  1. SAP RETAIL 商品LISTING方法之一
  2. 使用bpf 排查 fd 泄漏
  3. 天堂Lineage(單機版)從零開始架設教學 Installing Lineage 3.52 Server - On Windows
  4. c语言实现各种排序,c语言实现各种排序算法
  5. xshell安装mysql步骤_xshell怎么搭建mysql
  6. hibernate教程笔记7
  7. 【Django 2021年最新版教程25】模板语言 前端for循环怎么用 实例
  8. 内网分享文件html源码,vue项目分享html页面(服务器只能内网访问)
  9. 黑苹果显卡加速_谁说苹果macOS系统不适合3D,没有OC渲染器?
  10. 安装树莓派摄像头模块方法
  11. [nssl1320][jzoj cz 2108] 买装备 {dfs}
  12. 虚拟机中Linux扩容硬盘空间
  13. 2019银保监计算机类真题,2019中国银保监会招聘考试全真模拟卷(计算机类)
  14. Win 10 + VMware Workstation Pro15 + Ubuntu 18.04 虚拟机安装教程
  15. 梦幻西游手游300级装备、30级宝石、抽奖后台、坐骑版本搭建技术讲解
  16. IBM X3650服务器使用说明一
  17. jvm-sandbox:基础了解及demo演示
  18. html5 声控游戏,用声音来放大招吧!10款独具创意的声控游戏
  19. 【STM32】芯片自锁、No Cortex-M SW Device Found/HardFault_Handler无法下载等问题的解决办法
  20. java主类结构、基本数据类型、 变量与常量、运算符、数据类型转换、代码注释与编码规范

热门文章

  1. 正则表达式匹配单个字符(.、[]、\d、\D、\s、\S、\w、\W)
  2. 1哈哈欢迎使用CSDN-markdown编辑器
  3. 小时候的小霸王游戏!坦克大战 超级玛丽 魂斗罗 忍者神龟 都有!
  4. 位操作-按位与之如何求二进制数的1个数
  5. Python-Django配置阿里大于的短信验证码接口
  6. Hexo 个人博客 SEO 优化(3):改造你的博客,提升搜索引擎排名
  7. LiFi会将大数据和物联网带到新高度吗?
  8. canvas-绘制矩形-读书笔记
  9. Liferay7 BPM门户开发之11: Activiti工作流程开发的一些统一规则和实现原理(完整版)...
  10. 虚拟机WIN7显示主机ubuntu的文件