1. // Dijkstra算法,适用于没有负边的情况
  2. // 注意:是没有负边,不是没有负环
  3. // 在这一条件下,可以将算法进行优化
  4. // 从O(v*E)的复杂度,到O(V^2)或者是O(E*log(V))
  5. // 现在我们来看第一种O(V^2)的实现
  6.  
  7. #include <cstdio>
  8. #include <iostream>
  9.  
  10. using namespace std;
  11.  
  12. const int max_N = +;
  13. const int max_E = +;
  14. const int INF = 1e9;
  15. // 这是一种很简单的实现方法
  16. // 图用临接矩阵来存储即可
  17. int cost[max_N][max_N];
  18. int d[max_N];
  19. bool used[max_N];
  20. int N,E;
  21.  
  22. void dijkstra(int s)
  23. {
  24. fill(d,d+N,INF);
  25. fill(used,used+N,false);
  26. d[s]=;
  27.  
  28. while(true)
  29. {
  30. int v=-;
  31. for(int i=;i<N;++i)
  32. {
  33. if(!used[i] && (v==- || d[i]<d[v]))
  34. {
  35. v=i;
  36. }
  37. }
  38.  
  39. if(v==-)
  40. {
  41. break;
  42. }
  43. used[v]=true;
  44. for(int i=;i<N;++i)
  45. {
  46. if(d[i]>d[v]+cost[v][i])
  47. {
  48. d[i]=d[v]+cost[v][i];
  49. }
  50. }
  51. }
  52. }
  53.  
  54. int main()
  55. {
  56. scanf("%d %d",&N,&E);
  57. int a,b,c;
  58. for(int i=;i<=N;++i)
  59. {
  60. for(int j=;j<=N;++j)
  61. {
  62. cost[i][j]=INF;
  63. }
  64. }
  65. for(int i=;i<E;++i)
  66. {
  67. scanf("%d %d %d",&a,&b,&c);
  68. cost[a][b]=c;
  69. cost[b][a]=c;
  70. }
  71.  
  72. dijkstra();
  73.  
  74. for(int i=;i<N;++i)
  75. {
  76. printf("%d ",d[i]);
  77. }
  78. return ;
  79. }
  80.  
  81. /*
  82. 7 10
  83. 0 1 2
  84. 0 2 5
  85. 1 2 4
  86. 1 3 6
  87. 1 4 10
  88. 2 3 2
  89. 3 5 1
  90. 4 5 3
  91. 4 6 5
  92. 5 6 9
  93.  
  94. */

Dijkstra算法 1的更多相关文章

  1. 求两点之间最短路径-Dijkstra算法

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

  2. Dijkstra算法优先队列实现与Bellman_Ford队列实现的理解

    /* Dijkstra算法用优先队列来实现,实现了每一条边最多遍历一次. 要知道,我们从队列头部找到的都是到 已经"建好树"的最短距离以及该节点编号, 并由该节点去更新 树根 到其 ...

  3. 关于dijkstra算法的一点理解

    最近在准备ccf,各种补算法,图的算法基本差不多看了一遍.今天看的是Dijkstra算法,这个算法有点难理解,如果不深入想的话想要搞明白还是不容易的.弄了一个晚自习,先看书大致明白了原理,就根据书上的 ...

  4. 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)

    关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...

  5. Dijkstra算法(二)之 C++详解

    本章是迪杰斯特拉算法的C++实现. 目录 1. 迪杰斯特拉算法介绍 2. 迪杰斯特拉算法图解 3. 迪杰斯特拉算法的代码说明 4. 迪杰斯特拉算法的源码 转载请注明出处:http://www.cnbl ...

  6. Dijkstra算法(一)之 C语言详解

    本章介绍迪杰斯特拉算法.和以往一样,本文会先对迪杰斯特拉算法的理论论知识进行介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现. 目录 1. 迪杰斯特拉算法介绍 2. 迪杰斯特拉算法 ...

  7. 最短路问题Dijkstra算法

    Dijkstra算法可以解决源点到任意点的最短距离并输出最短路径 准备: 建立一个距离数组d[ n ],记录每个点到源点的距离是多少 建立一个访问数组v[ n ],记录每个点是否被访问到 建立一个祖先 ...

  8. dijkstra算法求最短路

    艾兹格·W·迪科斯彻 (Edsger Wybe Dijkstra,1930年5月11日~2002年8月6日)荷兰人. 计算机科学家,毕业就职于荷兰Leiden大学,早年钻研物理及数学,而后转为计算学. ...

  9. 数据结构之Dijkstra算法

    基本思想 通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算). 此外,引进两个集合S和U.S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求 ...

  10. ACM: HDU 1869 六度分离-Dijkstra算法

    HDU 1869六度分离 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descri ...

随机推荐

  1. Mayor's posters (线段树+离散化)

    Mayor's posters Description The citizens of Bytetown, AB, could not stand that the candidates in the ...

  2. java反射机制梳理

    java反射机制梳理 Java反射简介 反射简介 编译和运行 编译时刻加载类是静态加载类.运行时刻加载类是动态加载类 要让Java程序能够运行,那么就得让Java类要被Java虚拟机加载.Java类如 ...

  3. Docker 使用笔记-常用基础命令

    常用基础命令 环境:Linux Ubuntu 1.查看docker信息 docker version | docker info 2.启动docker服务 sudo systemctl start d ...

  4. CentOS 使用yum安装 pip

    pip这个功能很不错,可以用来下载很多东西. 笔者使用的是CentOS Linux release 7.2.1511 (Core)这个版本. 查询版本的语句: cat /etc/redhat-rele ...

  5. selenium 调用JavaScript代码

    selenium 调用JavaScript代码 调用JavaScript方法有两种: execute_script(): 方法解释:是同步方法,用它执行js代码会阻塞主线程执行,直到js代码执行完毕. ...

  6. thinkphp3关闭Runtime中的日志方法

    将LOG_LEVEL允许记录的日志级别设置为空,则不会记录日志

  7. 第一次安装android studio遇到的问题

    安装android studio一点都不顺利,最后总是成功安装,但是忘了把问题记录下来,下一次肯定还肯能出现问题 忘了把问题记录下来了,好像是sync failed 第一次安装3.1.4遇到的问题,好 ...

  8. CBAM(Convolutional Block Attention Module)使用指南

    转自知乎 这货就是基于 SE-Net [5]中的 Squeeze-and-Excitation module 来进行进一步拓展 具体来说,文中把 channel-wise attention 看成是教 ...

  9. sqlserver install on linux chapter one

    Hello The MS open the source to let people download source. You may ask where to download ? Ask goog ...

  10. lua学习之函数篇

    函数 函数是对语句和表达式进行抽象的主要机制 两种用法 一是可以完成特定的任务,一句函数调用被视为一条语句 二是以只用来计算并返回特定的结果,视为一句表达式 print("Hello, Wo ...