原文:http://blog.csdn.net/mu399/article/details/50903876

转两张思路图非常好:

 

描述略   图片思路很清晰。  Dijkstra不适用负权值,负权值用 FLoyd算法。

贴上  严蔚敏版代码

  1. /*
  2. 测试数据 教科书 P189 G6 的邻接矩阵 其中 数字 1000000 代表无穷大
  3. 6
  4. 1000000 1000000 10 100000 30 100
  5. 1000000 1000000 5 1000000 1000000 1000000
  6. 1000000 1000000 1000000 50 1000000 1000000
  7. 1000000 1000000 1000000 1000000 1000000 10
  8. 1000000 1000000 1000000 20 1000000 60
  9. 1000000 1000000 1000000 1000000 1000000 1000000
  10. 结果:
  11. D[0] D[1] D[2] D[3] D[4] D[5]
  12. 0 1000000 10 50 30 60
  13. */
  14. #include <iostream>
  15. #include <cstdio>
  16. #define MAX 1000000
  17. using namespace std;
  18. int arcs[][];//邻接矩阵
  19. int D[];//保存最短路径长度
  20. int p[][];//路径
  21. int final[];//若final[i] = 1则说明 顶点vi已在集合S中
  22. int n = ;//顶点个数
  23. int v0 = ;//源点
  24. int v,w;
  25. void ShortestPath_DIJ()
  26. {
  27. for (v = ; v < n; v++) //循环 初始化
  28. {
  29. final[v] = ; D[v] = arcs[v0][v];
  30. for (w = ; w < n; w++) p[v][w] = ;//设空路径
  31. if (D[v] < MAX) {p[v][v0] = ; p[v][v] = ;}
  32. }
  33. D[v0] = ; final[v0]=; //初始化 v0顶点属于集合S
  34. //开始主循环 每次求得v0到某个顶点v的最短路径 并加v到集合S中
  35. for (int i = ; i < n; i++)
  36. {
  37. int min = MAX;
  38. for (w = ; w < n; w++)
  39. {
  40. //我认为的核心过程--选点
  41. if (!final[w]) //如果w顶点在V-S中
  42. {
  43. //这个过程最终选出的点 应该是选出当前V-S中与S有关联边
  44. //且权值最小的顶点 书上描述为 当前离V0最近的点
  45. if (D[w] < min) {v = w; min = D[w];}
  46. }
  47. }
  48. final[v] = ; //选出该点后加入到合集S中
  49. for (w = ; w < n; w++)//更新当前最短路径和距离
  50. {
  51. /*在此循环中 v为当前刚选入集合S中的点
  52. 则以点V为中间点 考察 d0v+dvw 是否小于 D[w] 如果小于 则更新
  53. 比如加进点 3 则若要考察 D[5] 是否要更新 就 判断 d(v0-v3) + d(v3-v5) 的和是否小于D[5]
  54. */
  55. if (!final[w] && (min+arcs[v][w]<D[w]))
  56. {
  57. D[w] = min + arcs[v][w];
  58. // p[w] = p[v];
  59. p[w][w] = ; //p[w] = p[v] + [w]
  60. }
  61. }
  62. }
  63. }
  64.  
  65. int main()
  66. {
  67. cin >> n;
  68. for (int i = ; i < n; i++)
  69. {
  70. for (int j = ; j < n; j++)
  71. {
  72. cin >> arcs[i][j];
  73. }
  74. }
  75. ShortestPath_DIJ();
  76. for (int i = ; i < n; i++) printf("D[%d] = %d\n",i,D[i]);
  77. return ;
  78. }

最短路径-----迪杰斯特拉算法(C语言版)的更多相关文章

  1. 数据结构图之三(最短路径--迪杰斯特拉算法——转载自i=i++

    数据结构图之三(最短路径--迪杰斯特拉算法)   [1]最短路径 最短路径?别乱想哈,其实就是字面意思,一个带边值的图中从某一个顶点到另外一个顶点的最短路径. 官方定义:对于内网图而言,最短路径是指两 ...

  2. 迪杰斯特拉算法c语言实现

    /*http://1wangxiaobo@163.com 数据结构C语言版 迪杰斯特拉算法  P189 http://1wangxiaobo@163.com 编译环境:Dev-C++ 4.9.9.2  ...

  3. 图->最短路径->单源最短路径(迪杰斯特拉算法Dijkstra)

    文字描述 引言:如下图一个交通系统,从A城到B城,有些旅客可能关心途中中转次数最少的路线,有些旅客更关心的是节省交通费用,而对于司机,里程和速度则是更感兴趣的信息.上面这些问题,都可以转化为求图中,两 ...

  4. 单源最短路径-迪杰斯特拉算法(Dijkstra's algorithm)

    Dijkstra's algorithm 迪杰斯特拉算法是目前已知的解决单源最短路径问题的最快算法. 单源(single source)最短路径,就是从一个源点出发,考察它到任意顶点所经过的边的权重之 ...

  5. [从今天开始修炼数据结构]图的最短路径 —— 迪杰斯特拉算法和弗洛伊德算法的详解与Java实现

    在网图和非网图中,最短路径的含义不同.非网图中边上没有权值,所谓的最短路径,其实就是两顶点之间经过的边数最少的路径:而对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,我们称路径上第 ...

  6. 图的最短路径---迪杰斯特拉(Dijkstra)算法浅析

    什么是最短路径 在网图和非网图中,最短路径的含义是不一样的.对于非网图没有边上的权值,所谓的最短路径,其实就是指两顶点之间经过的边数最少的路径. 对于网图,最短路径就是指两顶点之间经过的边上权值之和最 ...

  7. 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)

    上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...

  8. 最短路径之迪杰斯特拉算法的Java实现

    Dijkstra算法是最短路径算法中为人熟知的一种,是单起点全路径算法.该算法被称为是“贪心算法”的成功典范.本文接下来将尝试以最通俗的语言来介绍这个伟大的算法,并赋予java实现代码. 一.知识准备 ...

  9. C++迪杰斯特拉算法求最短路径

    一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...

随机推荐

  1. 使用正则表达式来截取nginx中的内置变量

    nginx 中的内置变量都可以通过 if 指令 + 正则表达式来进行截取,截取之后的结果通过正则表达式的分组来进行引用 比如:从请求中传过来的一个名为 ssl_client_s_dn 的变量,它的值是 ...

  2. Amazon ec2 改成密码登录方式

    sudo passwd rootsu rootvi /etc/ssh/sshd_config"# PasswordAuthentication yes" uncommentsbin ...

  3. CentOS 安装PostregSQL9.2 同时出现pg安装错误

    错误: Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /usr/local/bin ...

  4. 利用 bugly 分析应用崩溃

    Bugly-Crash监控能让我们及时的掌控应用的Crash,并快速修复.这种情况就在于我们把应用发布出去了,但是用户那边有着各种各样我们想象不到的系统崩溃,我们无法通过简单的控制台捕获错误信息和崩溃 ...

  5. XTU 1267 - Highway - [树的直径][2017湘潭邀请赛H题(江苏省赛)]

    这道题可能有毒……总之一会儿能过一会儿不能过的,搞的我很心烦…… 依然是上次2017江苏省赛的题目,之前期末考试结束了之后有想补一下这道题,当时比较懵逼不知道怎么做……看了题解也不是很懂……就只好放弃 ...

  6. IDEA2016.3搭建Struts2+Hibernate+Spring项目环境

    IDEA搭建SSH环境 1.环境 软件版本:IntelliJ IDEA 2016.3.2 系统:windows 7 32位 / ubuntu 框架:Hibernate3,Spring3.2, Stru ...

  7. Python:fromkeys()方法

    简介 Python 字典(Dictionary) fromkeys() 函数用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值. 语法 fromkeys()方法语法: ...

  8. 自动布局又出问题-HPPGCTableViewCell

    [self.firstComment mas_makeConstraints:^(MASConstraintMaker *make) {        make.top.mas_equalTo(sel ...

  9. AOP与JAVA动态代理

    1.AOP的各种实现 AOP就是面向切面编程,我们可以从以下几个层面来实现AOP 在编译期修改源代码 在运行期字节码加载前修改字节码 在运行期字节码加载后动态创建代理类的字节码 2.AOP各种实现机制 ...

  10. dedecms网站迁移时记得将安装目录放空 附迁移的正确方法

    这段时间在赶一些新项目,我们建站一般都在本地服务器搭建起来,测试得差不多了才传到网上,这样对蜘蛛也相对友好一些,要不然改来改去变化太大给搜索引擎的第一印象很不好.但是由于本地环境和服务器环境还是有一些 ...