Luogu单源最短路径模版题
dijkstra

  1. #include<cstdio>
  2. #include<vector>
  3. using namespace std;
  4. const int oo=0xfffff;
  5. struct data
  6. {
  7. int to,val;
  8. };
  9. vector<data> edge[10001];
  10. bool visit[10001];
  11. int cost[10001],n,m,s;
  12. void add(int a,int b,int val)
  13. {
  14. data tmp;
  15. tmp.to=b;
  16. tmp.val=val;
  17. edge[a].push_back(tmp);
  18. }
  19. void init()
  20. {
  21. scanf("%d%d%d",&n,&m,&s);
  22. int a,b,val;
  23. for (int i=1;i<=m;i++)
  24. {
  25. scanf("%d%d%d",&a,&b,&val);
  26. add(a,b,val);
  27. }
  28. }
  29. void first()
  30. {
  31. for (int i=1;i<=n;i++) cost[i]=oo;
  32. cost[s]=0;
  33. }
  34. void dijkstra()
  35. {
  36. for (int i=1;i<=n;i++)
  37. {
  38. int mincost=oo,mini;
  39. for (int j=1;j<=n;j++)
  40. {
  41. if (!visit[j]&&mincost>cost[j])
  42. {
  43. mincost=cost[j];
  44. mini=j;
  45. }
  46. }
  47. visit[mini]=true;
  48. int len=edge[mini].size();
  49. for (int j=0;j<len;j++)
  50. cost[edge[mini][j].to]=min(cost[edge[mini][j].to],mincost+edge[mini][j].val);
  51. }
  52. }
  53. int main()
  54. {
  55. init();
  56. first();
  57. dijkstra();
  58. for (int i=1;i<=n;i++)
  59. if (cost[i]!=0xfffff) printf("%d ",cost[i]);
  60. else printf("%d ",2147483647);
  61. return 0;
  62. }

bellman_ford

  1. #include<cstdio>
  2. #include<vector>
  3. using namespace std;
  4. const int oo=0xfffff;
  5. struct data
  6. {
  7. int str,to,val;
  8. };
  9. vector<data> e;
  10. bool visit[10001];
  11. int cost[10001],n,m,s;
  12. void add(int a,int b,int val)
  13. {
  14. data tmp;
  15. tmp.str=a;
  16. tmp.to=b;
  17. tmp.val=val;
  18. e.push_back(tmp);
  19. }
  20. void init()
  21. {
  22. scanf("%d%d%d",&n,&m,&s);
  23. int a,b,val;
  24. for (int i=1;i<=m;i++)
  25. {
  26. scanf("%d%d%d",&a,&b,&val);
  27. add(a,b,val);
  28. }
  29. }
  30. void first()
  31. {
  32. for (int i=1;i<=n;i++) cost[i]=oo;
  33. cost[s]=0;
  34. }
  35. void bellman_ford()
  36. {
  37. for (int i=1;i<=n;i++)
  38. {
  39. bool flag=false;
  40. for (int j=0;j<m;j++)
  41. {
  42. if (cost[e[j].to]>cost[e[j].str]+e[j].val)
  43. {
  44. flag=true;
  45. cost[e[j].to]=cost[e[j].str]+e[j].val;
  46. }
  47. }
  48. if (!flag) break;
  49. }
  50. }
  51. int main()
  52. {
  53. init();
  54. first();
  55. bellman_ford();
  56. for (int i=1;i<=n;i++)
  57. if (cost[i]!=0xfffff) printf("%d ",cost[i]);
  58. else printf("%d ",2147483647);
  59. return 0;
  60. }

SPFA

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<vector>
  4. using namespace std;
  5. struct data
  6. {
  7. int e,v;
  8. };
  9. vector<data> a[500001];
  10. int n,m,f,g,s,w,que[10001],cost[10001];
  11. bool visit[10001];
  12. void add(int sta,int end,int val)
  13. {
  14. data temp;
  15. temp.e=end;temp.v=val;
  16. a[sta].push_back(temp);
  17. }
  18. void SPFA()
  19. {
  20. int head=0,tail=1,mod=n+1;
  21. que[head]=s;
  22. while (head!=tail)
  23. {
  24. int t=que[head];
  25. for (int i=0;i<a[t].size();i++)
  26. {
  27. if (cost[t]+a[t][i].v<cost[a[t][i].e])
  28. {
  29. if (!visit[a[t][i].e])
  30. {
  31. que[tail]=a[t][i].e;
  32. tail++;
  33. tail%=mod;
  34. visit[a[t][i].e]=true;
  35. }
  36. cost[a[t][i].e]=cost[t]+a[t][i].v;
  37. }
  38. }
  39. head++;
  40. head%=mod;
  41. visit[t]=0;
  42. }
  43. }
  44. void First()
  45. {
  46. for (int i=1;i<=n;i++) cost[i]=2147483647;
  47. cost[s]=0;
  48. }
  49. int main()
  50. {
  51. cin>>n>>m>>s;
  52. for (int i=1;i<=m;i++)
  53. {
  54. cin>>f>>g>>w;
  55. add(f,g,w);
  56. }
  57. First();
  58. SPFA();
  59. for (int i=1;i<=n;i++) cout<<cost[i]<<" ";
  60. return 0;
  61. }

【2018寒假集训Day 7】【最短路径】三种算法的模板的更多相关文章

  1. 最短路问题的三种算法&模板

    最短路算法&模板 最短路问题是图论的基础问题.本篇随笔就图论中最短路问题进行剖析,讲解常用的三种最短路算法:Floyd算法.Dijkstra算法及SPFA算法,并给出三种算法的模板.流畅阅读本 ...

  2. c语言求回文数的三种算法的描述

    c语言求回文数的三种算法的描述 题目描述 注意:(这些回文数都没有前导0) 1位的回文数有0,1,2,3,4,5,6,7,8,9 共10个: 2位的回文数有11,22,33,44,55,66,77,8 ...

  3. Java利用DES/3DES/AES这三种算法分别实现对称加密

    转载地址:http://blog.csdn.net/smartbetter/article/details/54017759 有两句话是这么说的: 1)算法和数据结构就是编程的一个重要部分,你若失掉了 ...

  4. 内存分配---FF、BF、WF三种算法

    动态分区分配是根据进程的实际需要,动态的为之分配内存空间.而在实现可变分区分配时,将涉及到分区分配中 所用的数据结构.分区分配算法和分区的分配与内存回收的过程. 分区分配中的数据结构:(1)描述空闲块 ...

  5. 图文实例解析,InnoDB 存储引擎中行锁的三种算法

    前文提到,对于 InnoDB 来说,随时都可以加锁(关于加锁的 SQL 语句这里就不说了,忘记的小伙伴可以翻一下上篇文章),但是并非随时都可以解锁.具体来说,InnoDB 采用的是两阶段锁定协议(tw ...

  6. 【集训Day4 动态规划】【2018寒假集训 Day4 更新】蛙人

    蛙人 (ple) 蛙人使用特殊设备潜水.设备中有一个气瓶,分两格:一格装氧气,另一格装氮气.留在水中有时间的限制,在深水中需要大量的氧气与氮气.为完成任务,蛙人必须安排好气瓶.每个气瓶可以用它的重量和 ...

  7. 求最短路径的三种算法: Ford, Dijkstra和Floyd

    Bellman-Ford算法 Bellman-Ford是一种容易理解的单源最短路径算法, Bellman-Ford算法需要两个数组进行辅助: dis[i]: 存储顶点i到源点已知最短路径 path[i ...

  8. 洛谷2018寒假集训tg第二次比赛第二题Princess Principal题解

    这算不算泄题啊...被kkk发现会咕咕咕吧. 题目大意:给定一个数列a,与常数n,m,k然后有m个询问,每个询问给定l,r.问在a[l]到a[r]中最少分成几段,使每段的和不超过k,如果无解,输出Ch ...

  9. 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)

    花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...

随机推荐

  1. Java基础(十三)内部类(inner class)

    1.内部类是定义在另一个类中的类.使用内部类的原因有: 内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据 内部类可以对同一个包中的其他类隐藏起来 当想要定义一个回调函数且不想编写大量代码 ...

  2. Cannot read property 'forEach' of undefined

    在singer-detail组件中,有一个_normalizeSongs()方法,遍历数组 _normalizeSongs(list) { let ret = []; list.forEach(ite ...

  3. SpringCloud之Hystrix断路器(六)

    整合Hystrix order-service pom.xml         <dependency> <groupId>org.springframework.cloud& ...

  4. Ubuntu 16 server 安装 tensorflow-GPU

    目录 显卡驱动安装 CUDA安装 cuDNN安装 tensorflow-gpu安装 本次使用主机配置: cpu:i7-8700K     显卡:GTX-1080Ti 一.安装显卡驱动 打开命令窗口(c ...

  5. jvm原理和代码运行的过程

    一次编译,到处运行 java一直宣传的口号是:一次编译,到处运行.那么它如何实现的呢?我们看下图: graph TD java原程序--javac编译-->java字节码 java字节码--&g ...

  6. html获得当前日期

    <html> <head> <title> </title> </head> <body> <!-- 获得当前日期(年月日 ...

  7. C++学习笔记13_操作MySql

    1. 链接Mysql #include <winsock.h>#include "mysql.h"#include <stdlib.h>#include & ...

  8. 学习笔记26_MVC前台强类型参数

    *一般在MVC中,aspx后台要往前台传递参数,使用ViewData["Key"] = obj; 前台就要 <%=(ViewData["key"] as ...

  9. JavaSE(下)

    11.抽象的(abstract)方法是否同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized? 都不能. 抽象方法需要子类重写,而静态的方法是无法被 ...

  10. [考试反思]0903NOIP模拟测试36:复始

    因为多次被说颓博客时间太长于是 真香 恢复粘排行榜的传统. 大体上就是,T1A的前三,剩下的T2A的排名,再然后按照T3暴力得分排名. T1是个暴力.3个A的5个得分的.数据点极强爆零率极高. 我的思 ...