最短路之Dijkstra算法
1. 邻接矩阵
1 int cost[MAX_V][MAX_V]; //assume cost[u][v]>0 2 int d[MAX_V]; 3 bool used[MAX_V]; 4 void Dijkstra(int s, int t, int V){ 5 for(int i=1; i<=V; i++) 6 used[i]=false, d[i]=INT_MAX, pre[i]=0; 7 d[s]=0; 8 while(true){ 9 int u=-1; 10 for(int v=1; v<=V; v++){ 11 if(!used[v]&&(u==-1||d[v]<d[u])) u=v; 12 } 13 if(u==-1||u==t) break; 14 used[u]=true; 15 for(int v=1; v<=V; v++){ 16 if(!cost[u][v]||used[v]) continue; 17 if(d[v]>d[u]+cost[u][v]) 18 d[v]=d[u]+cost[u][v], pre[v]=u; 19 } 20 } 21 }
2.邻接表
1 #define X first 2 #define Y second 3 typedef pair<int, int> pii; 4 typedef vector<pii> vpii; 5 vpii G[MAX_V]; 6 int d[MAX_V]; 7 bool used[MAX_V]; 8 void Dijkstra(int s, int t, int V){ 9 for(int i=1; i<=V; i++) 10 used[i]=false, d[i]=INT_MAX, pre[i]=0; 11 d[s]=0; 12 while(true){ 13 int u=-1; 14 for(int v=1; v<=V; v++){ 15 if(!used[v]&&(u==-1||d[v]<d[u])) u=v; 16 } 17 if(u==-1||u==t) break; 18 used[u]=true; 19 for(int i=0; i<G[u].size(); i++){ 20 int &v=G[u][i].X, &c=G[u][i].Y; 21 if(used[v]) continue; 22 if(d[v]>d[u]+c) 23 d[v]=d[u]+c, pre[v]=u; 24 } 25 } 26 }
转载于:https://www.cnblogs.com/Patt/p/4676402.html
最短路之Dijkstra算法相关推荐
- 最短路和次短路问题,dijkstra算法
1 /* 2 *题目大意: 3 *在一个有向图中,求从s到t两个点之间的最短路和比最短路长1的次短路的条数之和; 4 * 5 *算法思想: 6 *用A*求第K短路,目测会超时,直接在dijkstra算 ...
- HDU2544 最短路【Dijkstra算法】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 【单源最短路】Dijkstra算法求最短路
题目描述 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1. 输入格式 第一 ...
- 单源最短路之Dijkstra算法代码模板
常用算法代码模板总结 目录 注意事项 数组定义 实现步骤 练习例题:Dijkstra求最短路 注意事项 用来求单源最短路 所有边权都是正数,时间复杂度O(n^2) 可通过堆优化达到时间复杂度为O(ml ...
- hdu 2112 HDU Today 最短路(Dijkstra算法)
HDU Today Time Limit: 15000/5000 MS ...
- 【数据结构笔记24】单源最短路(迪克斯拉Dijkstra算法),多源最短路(弗洛伊德Floyd算法)
本次笔记内容: 7.1.1 概述 7.1.2 无权图的单源最短路 7.1.3 有权图的单源最短路 7.1.3-s 有权图的单源最短路示例 7.1.4 多源最短路算法 文章目录 最短路径问题 最短路径问 ...
- 图论-最短路Dijkstra算法详解超详 有图解
整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...
- dijkstra算法matlab程序_编程习题课 | 用最短路算法为你的小地图导航
简介:路网拓扑的正确导入方式,运筹学算法的完整实战案例,最详细的代码讲解与分享. 引言:在研究路径选择和流量分配等交通问题时,常常会用到最短路算法.用最短路算法解决交通问题存在两个难点:一.算法的选择 ...
- 单源最短路——dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止. 问 ...
最新文章
- arduino跑python,尝试在我的Arduino和stu上执行Python3.7.2中的代码
- 等比例缩放html5页面,css中如何做到容器按比例缩放
- CentOS7修改网卡名称为eth格式
- 修改VS2010生成的dll文件中的内容
- JavaScript中短时间高频次触发事件的优化
- c语言中将函数指针作为形参_在C中将有效指针作为NULL指针
- 在ubuntu 12.04上安装tomcat 7.40
- tcp 组播_深入了解TCP/IP协议
- bzoj 4883 [Lydsy1705月赛]棋盘上的守卫——并查集(思路!)
- guava 工具类及代码
- 语义分割系列5-Pspnet(pytorch实现)
- C语言图形库——EasyX基本贴图
- 大一c语言课设之图书管理系统
- 360度全景图是如何生成的?
- Apache的Order Allow,Deny 配置详解
- ChatGPT深度体验记录,期待GPT-4(测试各领域知识,正常聊天,写代码,写诗歌,模拟人格,机器翻译,语法改错等)
- MP4和HR-HDTV压制教程
- 中国学术会议(2009)---002
- 编程之美 烙饼问题 java实现(检测状态是否出现过)
- [豆瓣9.2]梯利的西方哲学史为入门级作品中的最佳推荐《西方哲学史-增补修订版》(唯一带索引的版本)...