题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=2544

思路

最短路算法模板题,求解使用的Dijkstra算法、Floyd算法、SPFA算法可以当做求解最短路问题的模板使用。

代码

Dijkstra算法:

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <cstdio>
  5. using namespace std;
  6.  
  7. const int INF = 0x3f3f3f;
  8. const int N = + ;
  9. int map[N][N];
  10. int dist[N];
  11. int visit[N];
  12. int n, m;
  13.  
  14. void dijkstra()
  15. {
  16. memset(visit, , sizeof(visit));
  17. for (int i = ; i <= n; i++)
  18. dist[i] = map[][i];
  19. dist[] = ;
  20. int min_dist, now;
  21. for (int i = ; i <= n; i++)
  22. {
  23. min_dist = INF;
  24. for (int j = ; j <= n; j++)
  25. {
  26. if (!visit[j] && dist[j] < min_dist)
  27. {
  28. min_dist = dist[j];
  29. now = j;
  30. }
  31. }
  32. if (min_dist == INF) break;
  33. visit[now] = ;
  34. for (int j = ; j <= n; j++) //“松弛”操作
  35. {
  36. if (dist[now] + map[now][j] < dist[j])
  37. dist[j] = dist[now] + map[now][j];
  38. }
  39. }
  40. printf("%d\n", dist[n]);
  41. }
  42.  
  43. int main()
  44. {
  45. //freopen("hdoj2544.txt", "r", stdin);
  46. while (scanf("%d%d", &n, &m) == && n)
  47. {
  48. memset(map, INF, sizeof(map));
  49. int a, b, c;
  50. for (int i = ; i < m; i++)
  51. {
  52. scanf("%d%d%d", &a, &b, &c);
  53. map[a][b] = map[b][a] = c;
  54. }
  55. dijkstra();
  56. }
  57. return ;
  58. }

Floyd算法:

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <cstdio>
  5. using namespace std;
  6.  
  7. const int INF = 0x3f3f3f;
  8. const int N = + ;
  9. int map[N][N];
  10. int n, m;
  11.  
  12. void floyd()
  13. {
  14. for (int k = ; k <= n; k++)
  15. for (int i = ; i <= n; i++)
  16. for (int j = ;j <= n; j++)
  17. map[i][j] = min(map[i][j], map[i][k] + map[k][j]);
  18. printf("%d\n", map[][n]);
  19. }
  20.  
  21. int main()
  22. {
  23. //freopen("hdoj2544.txt", "r", stdin);
  24. while (scanf("%d%d", &n, &m) == && n)
  25. {
  26. memset(map, INF, sizeof(map));
  27. int a, b, c;
  28. for (int i = ; i < m; i++)
  29. {
  30. scanf("%d%d%d", &a, &b, &c);
  31. map[a][b] = map[b][a] = c;
  32. }
  33. floyd();
  34. }
  35. return ;
  36. }

SPAF算法:

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <cstdio>
  5. #include <queue>
  6. #include <vector>
  7. using namespace std;
  8.  
  9. struct Edge
  10. {
  11. int s, e, dist; //边的起点、终点、长度
  12.  
  13. Edge() {}
  14. Edge(int s, int e, int d) :s(s), e(e), dist(d) {}
  15. };
  16.  
  17. const int INF = 0x3f3f3f;
  18. const int N = + ;
  19. vector<Edge> v[N]; //使用邻接表存储图
  20. int dist[N];
  21. int visit[N];
  22. int n, m;
  23.  
  24. void spfa(int s)
  25. {
  26. queue<int> q;
  27. memset(dist, INF, sizeof(dist));
  28. memset(visit, , sizeof(visit));
  29. q.push(s);
  30. visit[s] = ;
  31. dist[s] = ;
  32.  
  33. while (!q.empty())
  34. {
  35. int s = q.front();
  36. q.pop();
  37. visit[s] = ;
  38. for (int i = ; i < v[s].size(); i++)
  39. {
  40. int e = v[s][i].e;
  41. if (dist[e] > dist[s] + v[s][i].dist)
  42. {
  43. dist[e] = dist[s] + v[s][i].dist;
  44. if (visit[e] == )
  45. {
  46. visit[e] = ;
  47. q.push(e);
  48. }
  49. }
  50. }
  51. }
  52. printf("%d\n", dist[n]);
  53. }
  54.  
  55. int main()
  56. {
  57. //freopen("hdoj2544.txt", "r", stdin);
  58. while (scanf("%d%d", &n, &m) == && n)
  59. {
  60. for (int i = ;i <= n; i++)
  61. v[i].clear();
  62. int a, b, c;
  63. for (int i = ; i < m; i++)
  64. {
  65. scanf("%d%d%d", &a, &b, &c);
  66. v[a].push_back(Edge(a, b, c));
  67. v[b].push_back(Edge(b, a, c));
  68. }
  69. spfa(); //求结点1到其余各点的最短路径
  70. }
  71. return ;
  72. }

hdoj2544 最短路(Dijkstra || Floyd || SPFA)的更多相关文章

  1. poj1847 Tram(Dijkstra || Floyd || SPFA)

    题目链接 http://poj.org/problem?id=1847 题意 有n个车站,编号1~n,每个车站有k个出口,车站的出口默认是k个出口中的第一个,如果不想从默认出口出站,则需要手动选择出站 ...

  2. Dijkstra,floyd,spfa三种最短路的区别和使用

    这里不列举三种算法的实现细节,只是简单描述下思想,分析下异同 一 Dijkstra Dijkstra算法可以解决无负权图的最短路径问题,只能应付单源起点的情况,算法要求两个集合,开始所有点在第二个集合 ...

  3. 最短路径-Dijkstra+Floyd+Spfa

    Dijkstra算法: Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra ...

  4. 最短路--Dijkstra&&Floyed&&SPFA

    最短路径是一个很常见的问题,这里有3种方法,可供参考. 一.Dijkstra#include<iostream> #include<cstdio> #include<cs ...

  5. ACM/ICPC 之 最短路-Floyd+SPFA(BFS)+DP(ZOJ1232)

    这是一道非常好的题目,融合了很多知识点. ZOJ1232-Adventrue of Super Mario 这一题折磨我挺长时间的,不过最后做出来非常开心啊,哇咔咔咔 题意就不累述了,注释有写,难点在 ...

  6. hdu1874 畅通project续 最短路 floyd或dijkstra或spfa

    Problem Description 某省自从实行了非常多年的畅通project计划后.最终修建了非常多路.只是路多了也不好,每次要从一个城镇到还有一个城镇时,都有很多种道路方案能够选择.而某些方案 ...

  7. 算法学习笔记(三) 最短路 Dijkstra 和 Floyd 算法

    图论中一个经典问题就是求最短路.最为基础和最为经典的算法莫过于 Dijkstra 和 Floyd 算法,一个是贪心算法,一个是动态规划.这也是算法中的两大经典代表.用一个简单图在纸上一步一步演算,也是 ...

  8. HDU 1874 SPFA/Dijkstra/Floyd

    这题作为模板题,解法好多... 最近周围的人都在搞图论阿,感觉我好辣鸡,只会跟风学习. 暂时只有SPFA和Dijkstra的 SPFA (邻接表版.也可以写成临接矩阵存图,但题目可能给出平行边的,所以 ...

  9. 最短路问题(Bellman/Dijkstra/Floyd)

    最短路问题(Bellman/Dijkstra/Floyd) 寒假了,继续学习停滞了许久的算法.接着从图论开始看起,之前觉得超级难的最短路问题,经过两天的苦读,终于算是有所收获.把自己的理解记录下来,可 ...

随机推荐

  1. 超厉害的CSS3图片破碎爆炸效果!

    var fx  = { buffer : function(obj, cur, target, fnDo, fnEnd, fs){ if(!fs)fs=6; var now={}; var x=0; ...

  2. [洛谷P1228]地毯填补问题 题解(分治)

    Description 相传在一个古老的阿拉伯国家里,有一座宫殿.宫殿里有个四四方方的格子迷宫,国王选择驸马的方法非常特殊,也非常简单:公主就站在其中一个方格子上,只要谁能用地毯将除公主站立的地方外的 ...

  3. mysql zip 解压安装

    系统:win10 专业版 mysql 5.7.21 解压安装. 对于Windows,mysql官网推荐使用可执行文件进行安装,这里我还是暂时用noinstall 解压zip文件来安装 zip 文件解压 ...

  4. mogodb的安装与配置

    下载:https://www.mongodb.com/https://www.mongodb.com/ 安装:一直next,中间选择custom,选择自己的安装路径,最后安装成功. 配置:打开安装好的 ...

  5. .NET中如何自定义配置节点

    .NET Framework在web.config或app.config中默认提供了很多种设置,以便能够改变应用程序内嵌组件的行为,例如<connectionStrings>.<ht ...

  6. bootstrap-datetimepicker中设置中文

    1.引入插件文件,同时引入相应的语言文件 <script src="bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.j ...

  7. oracle主键约束、唯一键约束和唯一索引的区别

    (1)主键约束和唯一键约束均会隐式创建同名的唯一索引,当主键约束或者唯一键约束失效时,隐式创建的唯一索引会被删除: (2)主键约束要求列值非空,而唯一键约束和唯一索引不要求列值非空: (3)相同字段序 ...

  8. 使用RegSetValueEx修改注册表时遇到的问题(转)

    原文转自 http://blog.csdn.net/tracyzhongcf/article/details/4076870 1.今天在使用RegSetValueEx时发现一个问题: RegSetVa ...

  9. 超简单的qps统计方法(推荐)【转】

    统计最近N秒内的QPS值(包括每秒select,insert等值) mysql> select variable_name,sum(per_sec) as qps from (select st ...

  10. Python Challenge 第 4 关攻略:linkedlist

    代码 import requests url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing={}" ...