//以城市路为蓝本介绍算法

1381:城市路(Dijkstra)

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 4517     通过数: 1306

【题目描述】

罗老师被邀请参加一个舞会,是在城市n,而罗老师当前所处的城市为1,附近还有很多城市2~n-1,有些城市之间没有直接相连的路,有些城市之间有直接相连的路,这些路都是双向的,当然也可能有多条。

现在给出直接相邻城市的路长度,罗老师想知道从城市1到城市n,最短多少距离。

【输入】

输入n, m,表示n个城市和m条路;

接下来m行,每行a b c, 表示城市a与城市b有长度为c的路。

【输出】

输出1到n的最短路。如果1到达不了n,就输出-1。

【输入样例】

  1. 5 5
  2. 1 2 20
  3. 2 3 30
  4. 3 4 20
  5. 4 5 20
  6. 1 5 100

【输出样例】

  1. 90

【提示】

【数据规模和约定】

1≤n≤2000

1≤m≤10000

0≤c≤10000

【来源】

No

SPAF:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct node
  4. {
  5. int next,to,val;
  6. }edge[];
  7. int h[],num=;
  8. void add_edge(int from,int to,int val)
  9. {
  10. num++;
  11. edge[num].to=to;
  12. edge[num].val=val;
  13. edge[num].next=h[from];
  14. h[from]=num;
  15. }
  16. int dis[];
  17. bool used[];
  18. int Q[],head,tail;
  19. int main()
  20. {
  21. int n,m;
  22. cin>>n>>m;
  23.  
  24. for(int i=;i<=m;i++)
  25. {
  26. int x,y,z;
  27. cin>>x>>y>>z;
  28. add_edge(x,y,z);
  29. add_edge(y,x,z);
  30. }
  31.  
  32. memset(dis,0x3f,sizeof(dis));
  33. dis[]=;
  34. Q[]=;head=;tail=;used[]=true;
  35. while(head<=tail)
  36. {
  37. //1.取出头结点
  38. int from=Q[head];
  39. head++;
  40. used[from]=false;
  41. //2.拓展新的尾结点
  42. for(int j=h[from];j!=;j=edge[j].next)
  43. {
  44. int to=edge[j].to;
  45. int val=edge[j].val;
  46. if(dis[to]>dis[from]+val)
  47. {
  48. dis[to]=dis[from]+val;
  49. if(!used[to])
  50. {
  51. tail++;
  52. Q[tail]=to;
  53. used[to]=true;
  54. }
  55. }
  56. }
  57.  
  58. }
  59.  
  60. if(dis[n]==0x3f3f3f3f)
  61. cout<<-;
  62. else
  63. cout<<dis[n];
  64.  
  65. return ;
  66. }

Ford:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct node
  4. {
  5. int from,to,val;
  6. }edge[];
  7. int num;
  8. void add_edge(int from,int to,int val)
  9. {
  10. num++;
  11. edge[num].from=from;
  12. edge[num].to=to;
  13. edge[num].val=val;
  14. }
  15. int dis[];
  16. int main()
  17. {
  18. int n,m;
  19. cin>>n>>m;
  20. for(int i=;i<=m;i++)
  21. {
  22. int x,y,z;
  23. cin>>x>>y>>z;
  24. add_edge(x,y,z);
  25. }
  26. memset(dis,0x3f,sizeof(dis));
  27. dis[]=;
  28.  
  29. for(int i=;i<=n;i++)
  30. {
  31. for(int j=;j<=num;j++)
  32. {
  33. int from=edge[j].from;
  34. int to=edge[j].to;
  35. int val=edge[j].val;
  36. dis[to]=min(dis[to],dis[from]+val);
  37. dis[from]=min(dis[from],dis[to]+val);
  38. }
  39. }
  40.  
  41. if(dis[n]==0x3f3f3f3f)
  42. cout<<-;
  43. else
  44. cout<<dis[n];
  45. return ;
  46. }

//~~可能并不能过。。。。~~

最短路径算法(跟新SPFA,Ford)的更多相关文章

  1. 图论最短路径算法总结(Bellman-Ford + SPFA + DAGSP + Dijkstra + Floyd-Warshall)

    这里感谢百度文库,百度百科,维基百科,还有算法导论的作者以及他的小伙伴们...... 最短路是现实生活中很常见的一个问题,之前练习了很多BFS的题目,BFS可以暴力解决很多最短路的问题,但是他有一定的 ...

  2. 几大最短路径算法比较(Floyd & Dijkstra & Bellman-Ford & SPFA)

    几个最短路径算法的比较:Floyd 求多源.无负权边(此处错误?应该可以有负权边)的最短路.用矩阵记录图.时效性较差,时间复杂度O(V^3).       Floyd-Warshall算法(Floyd ...

  3. 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较

        几大最短路径算法比较 转自:http://blog.csdn.net/v_july_v/article/details/6181485 几个最短路径算法的比较: Floyd        求多 ...

  4. (最短路径算法整理)dijkstra、floyd、bellman-ford、spfa算法模板的整理与介绍

    这一篇博客以一些OJ上的题目为载体.整理一下最短路径算法.会陆续的更新... 一.多源最短路算法--floyd算法 floyd算法主要用于求随意两点间的最短路径.也成最短最短路径问题. 核心代码: / ...

  5. 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较(转)

    几大最短路径算法比较 几个最短路径算法的比较:Floyd        求多源.无负权边(此处错误?应该可以有负权边)的最短路.用矩阵记录图.时效性较差,时间复杂度O(V^3).       Floy ...

  6. Johnson 全源最短路径算法

    解决单源最短路径问题(Single Source Shortest Paths Problem)的算法包括: Dijkstra 单源最短路径算法:时间复杂度为 O(E + VlogV),要求权值非负: ...

  7. 最短路径算法——Dijkstra,Bellman-Ford,Floyd-Warshall,Johnson

    根据DSqiu的blog整理出来 :http://dsqiu.iteye.com/blog/1689163 PS:模板是自己写的,如有错误欢迎指出~ 本文内容框架: §1 Dijkstra算法 §2 ...

  8. Python小白的数学建模课-16.最短路径算法

    最短路径问题是图论研究中的经典算法问题,用于计算图中一个顶点到另一个顶点的最短路径. 在图论中,最短路径长度与最短路径距离却是不同的概念和问题,经常会被混淆. 求最短路径长度的常用算法是 Dijkst ...

  9. Johnson 全源最短路径算法学习笔记

    Johnson 全源最短路径算法学习笔记 如果你希望得到带互动的极简文字体验,请点这里 我们来学习johnson Johnson 算法是一种在边加权有向图中找到所有顶点对之间最短路径的方法.它允许一些 ...

  10. Floyd-Warshall 全源最短路径算法

    Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,即全源最短路径问题(All-Pairs Shortest Paths Probl ...

随机推荐

  1. 在移动硬盘中安装win10和macos双系统

    本文通过在SSD移动硬盘中安装win10和macos双系统,实现操作系统随身携带 小慢哥的原创文章,欢迎转载 目录 ▪ 目标 ▪ 准备工作 ▪ Step1. 清空分区,转换为GPT ▪ Step2. ...

  2. vue2.0 与 vue3.0 配置的区别

    提示:要了解vue2.0与vue3.0区别,首先你要熟悉vue2.0 从最明显最简单的开始 项目目录结构 可以明显的看出来,vue2.0与3.0在目录结构方面,有明显的不同(vue3.0我是安装了cs ...

  3. CSPS模拟 52

    我貌似曾经说过我是个只会做水题的巨型辣鸡.. 这次证明我水题都不会做.. T1 平均数 区间数$n^2$ 枚举是不可能了 可是好像没有无用的计算量.. 刚想到这里,此时开考15min 看见天皇比手势说 ...

  4. svg路径蒙版动画

    svg路径蒙版动画,是比较实用的一种动画效果,能够绘制如下图所示的动画. 接下来细说这样的动画是如何做成的: 1.准备工作 2.SVG路径动画 3.SVG路径蒙版动画 4.复杂图形的编辑技巧 1.准备 ...

  5. [转载]2.4 UiPath循环活动While的介绍和使用

    一.While循环的介绍 先判断条件是否满足, 如果满足, 再执行循环体, 直到判断条件不满足, 则跳出循环 二.While循环在UiPath中的使用 1. 打开设计器,在设计库中新建一个Flowch ...

  6. svg自适应写法

    svg自适应写法<pre><!DOCTYPE html><html lang="en"> <head> <meta chars ...

  7. php mkdir不能创建文件夹的原因

    php mkdir不能创建文件夹的原因 1 权限问题2 open_basedir设置问题 参考方法http://newmiracle.cn/?p=2896

  8. 读《MySQL必知必会》我学到了什么?

    前言 最近在写项目的时候发现自己的SQL基本功有些薄弱,遂上知乎查询MYSQL关键字,期望得到某些高赞答案的指点,于是乎发现了 https://www.zhihu.com/question/34840 ...

  9. 每天一道算法题-leetcode136-只出现一次的数字

    前言 打卡第一天 2019.10.26日打卡 算法,即解决问题的方法.同一个问题,使用不同的算法,虽然得到的结果相同,但是耗费的时间和资源是不同的.这就需要我们学习算法,找出哪个算法更好. 大家都知道 ...

  10. Sturts2整合Spring报错:org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml];

    十一月 17, 2019 1:11:44 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin警告: [SetPropertiesRul ...