最短路算法

问题描述

在加权图上,两点之间的最小边权和路径称为最短路径。

常用算法

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相关推荐

  1. 牛客--追债之旅 两种解法

    文章目录 第一种 第二种: 一共两种解法,所以即便你不会最短路,也可以做,甚至爆搜+剪枝的时间和空间消耗小于最短路做法. 第一种 题意: 小明现在要追讨一笔债务,已知有n座城市,每个城市都有编号,城市 ...

  2. usaco Ordered Fractions 顺序的分数(两种解法)

    这题很好玩,这里有两种解法. 第一种我自己写的,先找到所有的既约真分数,然后写了一个cmp函数进行排序最后输出.我写的时候还在想这章不是搜索吗这跟搜索关系不大吧,难道是怕我们思维定式化故意出的题不是搜 ...

  3. 约瑟夫环问题的两种解法(详解)

    约瑟夫环问题的两种解法(详解) 题目: Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓.于是决定了自杀方式,41个人排成一个圆 ...

  4. leetcode 73 矩阵置零 C++ 两种解法

    leetcode 73 两种解法~~,没有一个是我想出来的,哈哈~~ one class Solution {public:void setZeroes(vector<vector<int ...

  5. 北林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 ...

  6. 洛谷——P1597 语句解析(两种解法)

    P1597 语句解析(两种解法) 题目背景 木有背景-- 题目描述 一串长度不超过 255 的 PASCAL 语言代码,只有 a,b,c 3 个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变 ...

  7. 整数拆分的两种解法(已完成)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 整数拆分 ...

  8. 动态规划——钢筋切割问题的两种解法解析

    动态规划问题--钢筋切割问题的两种解法解析@TOC 钢筋切割问题: 对于这个问题的两种解法 先来个官方点的解法说明: 我对两种解法的个人理解 第一种解法: 这种解法就是把先钢筋分成两部分,分别记为 i ...

  9. Leetcode 855. Exam Room 考场就座:提供两种解法

    Leetcode 855. Exam Room 考场就座: 提供两种解法 855. Exam Room 考场就座(两种解法) 题目描述 示例: 解答1 代码1 解答2 代码2 855. Exam Ro ...

最新文章

  1. 教育园报修系统_【务实活动】“充电”模式强力开启,务实幼教2019暑期小红巾生存教育大培训...
  2. mac下chrome浏览器的标签页、进程和内存分配
  3. 基于ssm的学生成绩管理系统
  4. goudp文件传输服务器,golang udp服务端客户端例子
  5. 重载(overload)与重写(override)的区别
  6. MySQL函数/数据库函数
  7. mysql 主从一致性_mysql 主从一致性保证
  8. POJ1426-Find The Multiple-深度优先搜索BFS
  9. 文本编辑器(Editor)and 文件上传功能
  10. 思维导图 · App的商业模式:如何寻找商业化
  11. 唯物辩证法-矛盾论(普遍性+特殊性+斗争性+同一性)
  12. c语言编译器中cu是什么意思,.c文件调用.cu中的函数
  13. 80和443端口的区别
  14. Mac下用android studio创建安卓模拟器
  15. Visual Studio 2019 发行说明
  16. 【无标题】C#nbsp;语言入门基础介绍学习通http://www.bdgxy.com/
  17. 向量检索的索引构建算法综述
  18. 【生活常识】如何能安逸的活着?
  19. 抖音死亡计算机在线测,抖音死亡计算器怎么玩?抖音死亡计算器测试入口
  20. 【毕业设计】基于stm32的智能电子秤系统 - 物联网 嵌入式 单片机

热门文章

  1. 固体物理 2022.10.15
  2. stb_image使用说明
  3. JavaFx-SceneBuilder(可视化拖拽)
  4. Golang重载函数(反射模拟)
  5. 耳朵白鲸沙龙《如何突破自己?财经调查报道的调查手段》
  6. Activiti工作流浅析
  7. 【PANet】升级版Mask R-CNN
  8. (1)VisDrone无人机目标检测数据集介绍
  9. echarts基于父盒子达成自适应布局(大数据可视化页面必须!)
  10. 五子棋程序设计实现技术文档