hdoj2544 最短路(Dijkstra || Floyd || SPFA)
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=2544
思路
最短路算法模板题,求解使用的Dijkstra算法、Floyd算法、SPFA算法可以当做求解最短路问题的模板使用。
代码
Dijkstra算法:
- #include <algorithm>
- #include <iostream>
- #include <cstring>
- #include <cstdio>
- using namespace std;
- const int INF = 0x3f3f3f;
- const int N = + ;
- int map[N][N];
- int dist[N];
- int visit[N];
- int n, m;
- void dijkstra()
- {
- memset(visit, , sizeof(visit));
- for (int i = ; i <= n; i++)
- dist[i] = map[][i];
- dist[] = ;
- int min_dist, now;
- for (int i = ; i <= n; i++)
- {
- min_dist = INF;
- for (int j = ; j <= n; j++)
- {
- if (!visit[j] && dist[j] < min_dist)
- {
- min_dist = dist[j];
- now = j;
- }
- }
- if (min_dist == INF) break;
- visit[now] = ;
- for (int j = ; j <= n; j++) //“松弛”操作
- {
- if (dist[now] + map[now][j] < dist[j])
- dist[j] = dist[now] + map[now][j];
- }
- }
- printf("%d\n", dist[n]);
- }
- int main()
- {
- //freopen("hdoj2544.txt", "r", stdin);
- while (scanf("%d%d", &n, &m) == && n)
- {
- memset(map, INF, sizeof(map));
- int a, b, c;
- for (int i = ; i < m; i++)
- {
- scanf("%d%d%d", &a, &b, &c);
- map[a][b] = map[b][a] = c;
- }
- dijkstra();
- }
- return ;
- }
Floyd算法:
- #include <algorithm>
- #include <iostream>
- #include <cstring>
- #include <cstdio>
- using namespace std;
- const int INF = 0x3f3f3f;
- const int N = + ;
- int map[N][N];
- int n, m;
- void floyd()
- {
- for (int k = ; k <= n; k++)
- for (int i = ; i <= n; i++)
- for (int j = ;j <= n; j++)
- map[i][j] = min(map[i][j], map[i][k] + map[k][j]);
- printf("%d\n", map[][n]);
- }
- int main()
- {
- //freopen("hdoj2544.txt", "r", stdin);
- while (scanf("%d%d", &n, &m) == && n)
- {
- memset(map, INF, sizeof(map));
- int a, b, c;
- for (int i = ; i < m; i++)
- {
- scanf("%d%d%d", &a, &b, &c);
- map[a][b] = map[b][a] = c;
- }
- floyd();
- }
- return ;
- }
SPAF算法:
- #include <algorithm>
- #include <iostream>
- #include <cstring>
- #include <cstdio>
- #include <queue>
- #include <vector>
- using namespace std;
- struct Edge
- {
- int s, e, dist; //边的起点、终点、长度
- Edge() {}
- Edge(int s, int e, int d) :s(s), e(e), dist(d) {}
- };
- const int INF = 0x3f3f3f;
- const int N = + ;
- vector<Edge> v[N]; //使用邻接表存储图
- int dist[N];
- int visit[N];
- int n, m;
- void spfa(int s)
- {
- queue<int> q;
- memset(dist, INF, sizeof(dist));
- memset(visit, , sizeof(visit));
- q.push(s);
- visit[s] = ;
- dist[s] = ;
- while (!q.empty())
- {
- int s = q.front();
- q.pop();
- visit[s] = ;
- for (int i = ; i < v[s].size(); i++)
- {
- int e = v[s][i].e;
- if (dist[e] > dist[s] + v[s][i].dist)
- {
- dist[e] = dist[s] + v[s][i].dist;
- if (visit[e] == )
- {
- visit[e] = ;
- q.push(e);
- }
- }
- }
- }
- printf("%d\n", dist[n]);
- }
- int main()
- {
- //freopen("hdoj2544.txt", "r", stdin);
- while (scanf("%d%d", &n, &m) == && n)
- {
- for (int i = ;i <= n; i++)
- v[i].clear();
- int a, b, c;
- for (int i = ; i < m; i++)
- {
- scanf("%d%d%d", &a, &b, &c);
- v[a].push_back(Edge(a, b, c));
- v[b].push_back(Edge(b, a, c));
- }
- spfa(); //求结点1到其余各点的最短路径
- }
- return ;
- }
hdoj2544 最短路(Dijkstra || Floyd || SPFA)的更多相关文章
- poj1847 Tram(Dijkstra || Floyd || SPFA)
题目链接 http://poj.org/problem?id=1847 题意 有n个车站,编号1~n,每个车站有k个出口,车站的出口默认是k个出口中的第一个,如果不想从默认出口出站,则需要手动选择出站 ...
- Dijkstra,floyd,spfa三种最短路的区别和使用
这里不列举三种算法的实现细节,只是简单描述下思想,分析下异同 一 Dijkstra Dijkstra算法可以解决无负权图的最短路径问题,只能应付单源起点的情况,算法要求两个集合,开始所有点在第二个集合 ...
- 最短路径-Dijkstra+Floyd+Spfa
Dijkstra算法: Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra ...
- 最短路--Dijkstra&&Floyed&&SPFA
最短路径是一个很常见的问题,这里有3种方法,可供参考. 一.Dijkstra#include<iostream> #include<cstdio> #include<cs ...
- ACM/ICPC 之 最短路-Floyd+SPFA(BFS)+DP(ZOJ1232)
这是一道非常好的题目,融合了很多知识点. ZOJ1232-Adventrue of Super Mario 这一题折磨我挺长时间的,不过最后做出来非常开心啊,哇咔咔咔 题意就不累述了,注释有写,难点在 ...
- hdu1874 畅通project续 最短路 floyd或dijkstra或spfa
Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多路.只是路多了也不好,每次要从一个城镇到还有一个城镇时,都有很多种道路方案能够选择.而某些方案 ...
- 算法学习笔记(三) 最短路 Dijkstra 和 Floyd 算法
图论中一个经典问题就是求最短路.最为基础和最为经典的算法莫过于 Dijkstra 和 Floyd 算法,一个是贪心算法,一个是动态规划.这也是算法中的两大经典代表.用一个简单图在纸上一步一步演算,也是 ...
- HDU 1874 SPFA/Dijkstra/Floyd
这题作为模板题,解法好多... 最近周围的人都在搞图论阿,感觉我好辣鸡,只会跟风学习. 暂时只有SPFA和Dijkstra的 SPFA (邻接表版.也可以写成临接矩阵存图,但题目可能给出平行边的,所以 ...
- 最短路问题(Bellman/Dijkstra/Floyd)
最短路问题(Bellman/Dijkstra/Floyd) 寒假了,继续学习停滞了许久的算法.接着从图论开始看起,之前觉得超级难的最短路问题,经过两天的苦读,终于算是有所收获.把自己的理解记录下来,可 ...
随机推荐
- 超厉害的CSS3图片破碎爆炸效果!
var fx = { buffer : function(obj, cur, target, fnDo, fnEnd, fs){ if(!fs)fs=6; var now={}; var x=0; ...
- [洛谷P1228]地毯填补问题 题解(分治)
Description 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的 ...
- mysql zip 解压安装
系统:win10 专业版 mysql 5.7.21 解压安装. 对于Windows,mysql官网推荐使用可执行文件进行安装,这里我还是暂时用noinstall 解压zip文件来安装 zip 文件解压 ...
- mogodb的安装与配置
下载:https://www.mongodb.com/https://www.mongodb.com/ 安装:一直next,中间选择custom,选择自己的安装路径,最后安装成功. 配置:打开安装好的 ...
- .NET中如何自定义配置节点
.NET Framework在web.config或app.config中默认提供了很多种设置,以便能够改变应用程序内嵌组件的行为,例如<connectionStrings>.<ht ...
- bootstrap-datetimepicker中设置中文
1.引入插件文件,同时引入相应的语言文件 <script src="bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.j ...
- oracle主键约束、唯一键约束和唯一索引的区别
(1)主键约束和唯一键约束均会隐式创建同名的唯一索引,当主键约束或者唯一键约束失效时,隐式创建的唯一索引会被删除: (2)主键约束要求列值非空,而唯一键约束和唯一索引不要求列值非空: (3)相同字段序 ...
- 使用RegSetValueEx修改注册表时遇到的问题(转)
原文转自 http://blog.csdn.net/tracyzhongcf/article/details/4076870 1.今天在使用RegSetValueEx时发现一个问题: RegSetVa ...
- 超简单的qps统计方法(推荐)【转】
统计最近N秒内的QPS值(包括每秒select,insert等值) mysql> select variable_name,sum(per_sec) as qps from (select st ...
- Python Challenge 第 4 关攻略:linkedlist
代码 import requests url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing={}" ...