分享—对于最短路问题的笔记:

戳这里->原题链接

题目描述
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。

请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。

输入格式
第一行包含整数 n 和 m 。

接下来 m  行每行包含三个整数 x , y , z 表示存在一条从点 x 到点 y 的有向边,边长为 z。

输出格式
输出一个整数,表示 1 号点到 n 号点的最短距离。

如果路径不存在,则输出 −1。

数据范围
1 ≤ n ≤ 500 
1 ≤ m ≤ 10^5 
图中涉及边长均不超过 10000。

输入样例:

3 3
1 2 2
2 3 1
1 3 4

输出样例:

3
#include<bits/stdc++.h>
using namespace std;const int N=510;
int n,m;
int g[N][N];//输入的边与边的距离
int dist[N];//储存从1号点开始到每条边的距离
bool st[N];//这个点是否被打通(就是是非被当过最优点已被确定过)int dijkstra()
{memset(dist,0x3f3f3f3f,sizeof dist);//先相当于在每个路中间砌一个墙dist[1]=0;for(int i=1;i<n;i++)//除了第一个点,每个点都要被当做一列经历一次遍历{int t=-1;for(int j=1;j<=n;j++)//检查这个点是否为最优点(是否里第一个点最近)看呢条路的墙最容易打通{if(!st[j]&&(t==-1||dist[t]>dist[j]))t=j;}st[t]=true;for(int j=1;j<=n;j++)
//如果被作为最优点,就相当于此点被打通,你就看看通过这个点,到其他点的是否比之前短,如果满足就先作为最短路径先更新进来随后还会进行判断dist[j]=min(dist[j],dist[t]+g[t][j]);if(t==n) break;
//如果我们要查找的n号点已经被更新为最优点就说明最短距离已经被发现(因为咱们边的权值都为正,不可能还有到n最短的了,可以跳出来了)}if(dist[n]==0x3f3f3f3f)return -1;//如果打通的点也无法到达我们要找的n时,就说明到不了了return dist[n];
}
int main()
{scanf("%d%d",&n,&m);memset(g,0x3f,sizeof g);//当时我在想可以不写这个嘛,然后我突然想到,如果你让g默认为0,你从1->2可能会等于1->2->3,哪怕2->3根本没有路,但由于g[2][3]=0,所以路线也可能会更新,所以要设为最大值,就像堵墙档着。for(int i=0;i<m;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);if(g[a][b]>c)//因为题目说有重边和自环,所以要更新最优距离g[a][b]=c;//min(g[a][b],c);两种都可以}int s=dijkstra();cout<<s;return 0;
}

查漏补缺:

知识点一:

0x3f: int型的数据是占4个字节,32位,就是 2^32

而0x3f就是 2^6=64,显然是不满足int的需求

0x3f3f3f3f: 就已经是10^9级别的了,一般情况下很少有数据能够超过它,用来表示无穷大足够了

知识点二:

当点数和边数的关系是n的级别,呢我们就可以说这是稀疏图,使用邻接表的方法

当点数和边数的关系是n方的级别,呢我们就可以说这是稠密图,使用邻接矩阵的方法

总结:刚开始被搞得米米,发现了个刷题妙招,不会就敲,再不会就背,不出两天就差不多理解了。

欢迎来到一日一题的小菜鸟频道,睡不着就看看吧!

跟着小张刷题吧!

一日一题:第一题---Dijkstra求最短路 I(最浅显易懂!)相关推荐

  1. ~~朴素dijkstra算法 (搜索与图论)(附模板题AcWing 849. Dijkstra求最短路 I)

    模板 时间复杂是 O(n2+m), n表示点数,m 表示边数 int g[N][N]; // 存储每条边 int dist[N]; // 存储1号点到每个点的最短距离 bool st[N]; // 存 ...

  2. leetcode剑指offe刷题-第一题-用两个栈实现队列

    leetcode剑指offe刷题-第一题 文章目录 leetcode剑指offe刷题-第一题 前言 一.用两个栈实现队列 1.思路 2.代码如下 总结 前言 记录一下自己刷算法的路程. leetcod ...

  3. 计算机三级 网络技术 大题第一题 答题技巧分享

    最近在准备计算机三级网络技术考试,一边刷题,一边看了一些大佬的答题技巧分享,感觉挺有用的,就自己总结了一下给大家分享一下. 这一篇是大题第一题的技巧分享 先放个例题: 拿到题目的第一步,先把子网掩码转 ...

  4. AcWing 850. Dijkstra求最短路 II

    原题链接:AcWing 850. Dijkstra求最短路 II 给定一个 n 个点 m 条边的有向图,图中可能存在 重边 和 自环 ,所有边权均为 非负值 . 请你求出 1 号点到 n 号点的最短距 ...

  5. Dijkstra AcWing 850. Dijkstra求最短路 II

    Dijkstra AcWing 850. Dijkstra求最短路 II 原题链接 AcWing 850. Dijkstra求最短路 II 算法标签 最短路 Dijkstra 思路 图片摘自该题解 图 ...

  6. 图论入门(一),拓扑排序生成拓扑序列与Dijkstra求最短路

    基本知识 Dijkstra基本思想 拓扑排序思维视频讲解 848:有向图的拓扑排序 题目链接 题解: #include<bits/stdc++.h> using namespace std ...

  7. 堆优化版dijkstra算法:AcWing 850. Dijkstra求最短路 II

    堆优化版dijkstra算法分析: 朴素版dijkstra的时间复杂度为O(n^2),主要瓶颈在于第1步的寻找全局最小值的过程. 可以用小根堆(C++STL priority_queue)对dist数 ...

  8. AcWing 850. Dijkstra求最短路 II【最短路】【堆优化版Dijkstra】

    AcWing 850. Dijkstra求最短路 II 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 850. Dijkstra求 ...

  9. 2018美团点评编程题第一题

    晚上参加美团的笔试,今天从坐了一天的车,到了学校匆忙吃了饭,然后就开始了.确实是,脑子有点不灵光. 编程的第一题: 给定一个序列,输出这个序列子串的和为K的倍数的子串的长度,如果有重复,输出最大长度. ...

最新文章

  1. Auto Machine Learning 自动化机器学习笔记
  2. Linux redhat 5.4上安装MYDNS
  3. 编码练习——Java-2-流程控制
  4. c++primer plus 第11章 编程题第7题
  5. 玩转oracle 11g(39):oracle11g密码过期后的解决方法
  6. 解决CodeIgniter大量查询sql时占用内存大问题
  7. vs2008C1902数据库管理程序不匹配
  8. 理解Vue的计算属性
  9. C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem
  10. There has been an error processing your request[magento1.6]
  11. html编写个人博客_云开发平台开箱,3分钟零基础搭建个人Hexo博客
  12. 神舟笔记本电脑进入u启动之BIOS设置方法
  13. Python单例模式的多种实现方式
  14. bootstrap重置按钮
  15. pads图标logo库制作方法
  16. Could not resolve hostname github: Name or service
  17. 2的10次方-1的python表达式_第二章PythonⅠ的基本语法,python,I
  18. 几种常见的软件授权模式
  19. 实现微信通知提醒的方法总结
  20. shiro 权限框架

热门文章

  1. ufo帧率测试网站_技嘉雪鹰3080 VISION OC性能测试
  2. 中国力量的崛起:扒一扒新一代国际视频编码标准背后的“无限战争”
  3. 解决Mac 命令行报 “zsh: command not found: adb”
  4. 【市场营销学三】企业战略与营销管理
  5. 计算机二级准考证号忘了,怎样查成绩或证明材料听语音
  6. halcon相机标定助手_HALCON高级篇:单个相机的尺寸测量
  7. smtp、pop3、IMAP是什么类型的服务器?
  8. Windows Media Player不能播放rmvb视频解决办法
  9. Logstash【从无到有从有到无】【L2】Logstash入门
  10. git新建分支并切换分支