最短路的两种解法Dijkstra和spfa
最短路算法
问题描述
在加权图上,两点之间的最小边权和路径称为最短路径。
常用算法
Dijkstra算法
Dijkstra算法本质上可以看做一种贪心算法,即每次由已定最短路点集找出最小拓展点,并把最小拓展点并入最短路点集。
对于Dijkstra的正确性的证明,我们先证明以下引理:
**引理:**对于一个连通的最短路点集,从点集中拓展出的不在最短路点集的最短点,一定是该点的最短点。
证明:用反证法(具体就不写了)
代码:
struct Node{int id,dist;
}
Node makeNode(int id,int dist){Node now;now.id=id;now.dist=dist;return now;
}
priority_queue<Node>q;
void Dijkstra(int s){memset(use,0,sizeof use);while(!q.empty()) q.pop();for(int i=1;i<=n;++i) dis[i]=IFF;q.push(makeNode(s,dis[s]=0));while(!q.empty()){Node now=q.top();q.pop();if(now.dist<dis[now.id]||use[now.id]) continue;use[now.id]=1;for(int i=head[now.id];i;i=edge[i].pre){int fr=now.id,to=edge[i].to;if(dis[to]<=dis[fr]+edge[i].w) continue;dis[to]=dis[fr]+edge[i].w;q.push(makeNode(to,dis[to]));}}
}
队列优化的贝尔福特曼 s p f a spfa spfa
代码如下
queue<int>q;
void spfa(int s){memset(use,0,sizeof use);while(!q.empty()) q.pop();for(int i=1;i<=n;++i)dis[i]=IFF;dis[s]=0;q.push(s);use[s]=1;while(!q.empty()){int now=q.front();q.pop();use[now]=0;for(int i=head[now];i;i=edge[i].pre){int to=edge[i].to;if(dis[to]<=dis[now]+edge[i].val) continue;dis[to]=dis[now]+edge[i].val;if(!use[to]){use[to]=1;q.push(to);}}}
}
最短路的两种解法Dijkstra和spfa相关推荐
- 牛客--追债之旅 两种解法
文章目录 第一种 第二种: 一共两种解法,所以即便你不会最短路,也可以做,甚至爆搜+剪枝的时间和空间消耗小于最短路做法. 第一种 题意: 小明现在要追讨一笔债务,已知有n座城市,每个城市都有编号,城市 ...
- usaco Ordered Fractions 顺序的分数(两种解法)
这题很好玩,这里有两种解法. 第一种我自己写的,先找到所有的既约真分数,然后写了一个cmp函数进行排序最后输出.我写的时候还在想这章不是搜索吗这跟搜索关系不大吧,难道是怕我们思维定式化故意出的题不是搜 ...
- 约瑟夫环问题的两种解法(详解)
约瑟夫环问题的两种解法(详解) 题目: Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓.于是决定了自杀方式,41个人排成一个圆 ...
- leetcode 73 矩阵置零 C++ 两种解法
leetcode 73 两种解法~~,没有一个是我想出来的,哈哈~~ one class Solution {public:void setZeroes(vector<vector<int ...
- 北林oj-算法设计与分析-Line up in the canteen(两种解法,附思路)
描述 One day, there is a kind of new delicious food from one of the windows in the canteen. All studen ...
- 洛谷——P1597 语句解析(两种解法)
P1597 语句解析(两种解法) 题目背景 木有背景-- 题目描述 一串长度不超过 255 的 PASCAL 语言代码,只有 a,b,c 3 个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变 ...
- 整数拆分的两种解法(已完成)
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 整数拆分 ...
- 动态规划——钢筋切割问题的两种解法解析
动态规划问题--钢筋切割问题的两种解法解析@TOC 钢筋切割问题: 对于这个问题的两种解法 先来个官方点的解法说明: 我对两种解法的个人理解 第一种解法: 这种解法就是把先钢筋分成两部分,分别记为 i ...
- Leetcode 855. Exam Room 考场就座:提供两种解法
Leetcode 855. Exam Room 考场就座: 提供两种解法 855. Exam Room 考场就座(两种解法) 题目描述 示例: 解答1 代码1 解答2 代码2 855. Exam Ro ...
最新文章
- 教育园报修系统_【务实活动】“充电”模式强力开启,务实幼教2019暑期小红巾生存教育大培训...
- mac下chrome浏览器的标签页、进程和内存分配
- 基于ssm的学生成绩管理系统
- goudp文件传输服务器,golang udp服务端客户端例子
- 重载(overload)与重写(override)的区别
- MySQL函数/数据库函数
- mysql 主从一致性_mysql 主从一致性保证
- POJ1426-Find The Multiple-深度优先搜索BFS
- 文本编辑器(Editor)and 文件上传功能
- 思维导图 · App的商业模式:如何寻找商业化
- 唯物辩证法-矛盾论(普遍性+特殊性+斗争性+同一性)
- c语言编译器中cu是什么意思,.c文件调用.cu中的函数
- 80和443端口的区别
- Mac下用android studio创建安卓模拟器
- Visual Studio 2019 发行说明
- 【无标题】C#nbsp;语言入门基础介绍学习通http://www.bdgxy.com/
- 向量检索的索引构建算法综述
- 【生活常识】如何能安逸的活着?
- 抖音死亡计算机在线测,抖音死亡计算器怎么玩?抖音死亡计算器测试入口
- 【毕业设计】基于stm32的智能电子秤系统 - 物联网 嵌入式 单片机