最近在学习算法,看到有人写过的这样一个算法,我决定摘抄过来作为我的学习笔记:

  1. <span style="font-size:18px;">/*
  2. * File: shortest.c
  3. * Description: 网络中两点最短路径 Dijkstra 算法
  4. * Shortest Path Dijkstra Algorithm
  5. * Created: 2001/11/25
  6. * Author: Justin Hou [mailto:justin_hou@hotmail.com]
  7. */
  8.  
  9. #include <stdio.h>
  10. #define true 1
  11. #define false 0
  12. #define I 9999 /* 无穷大 */
  13. #define N 20 /* 城市顶点的数目 */
  14.  
  15. int cost[N][N] = {
  16. {0,3,I,I,I,1,I,I,I,I,I,I,I,I,I,I,I,I,I,I},
  17. {3,0,5,I,I,I,6,I,I,I,I,I,I,I,I,I,I,I,I,I},
  18. {I,5,0,4,I,I,I,1,I,I,I,I,I,I,I,I,I,I,I,I},
  19. {I,I,4,0,2,I,I,I,6,I,I,I,I,I,I,I,I,I,I,I},
  20. {I,I,I,2,0,I,I,I,I,7,I,I,I,I,I,I,I,I,I,I},
  21. {1,I,I,I,I,0,1,I,I,I,2,I,I,I,I,I,I,I,I,I},
  22. {I,6,I,I,I,1,0,6,I,I,I,7,I,I,I,I,I,I,I,I},
  23. {I,I,1,I,I,I,6,0,2,I,I,I,3,I,I,I,I,I,I,I},
  24. {I,I,I,6,I,I,I,2,0,8,I,I,I,4,I,I,I,I,I,I},
  25. {I,I,I,I,7,I,I,I,8,0,I,I,I,I,5,I,I,I,I,I},
  26. {I,I,I,I,I,2,I,I,I,I,0,4,I,I,I,3,I,I,I,I},
  27. {I,I,I,I,I,I,7,I,I,I,4,0,3,I,I,I,4,I,I,I},
  28. {I,I,I,I,I,I,I,3,I,I,I,3,0,3,I,I,I,5,I,I},
  29. {I,I,I,I,I,I,I,I,4,I,I,I,3,0,7,I,I,I,2,I},
  30. {I,I,I,I,I,I,I,I,I,5,I,I,I,7,0,I,I,I,I,3},
  31. {I,I,I,I,I,I,I,I,I,I,3,I,I,I,I,0,5,I,I,I},
  32. {I,I,I,I,I,I,I,I,I,I,I,4,I,I,I,5,0,8,I,I},
  33. {I,I,I,I,I,I,I,I,I,I,I,I,5,I,I,I,8,0,6,I},
  34. {I,I,I,I,I,I,I,I,I,I,I,I,I,2,I,I,I,6,0,4},
  35. {I,I,I,I,I,I,I,I,I,I,I,I,I,I,3,I,I,I,4,0}
  36. };
  37. int dist[N]; /* 存储当前最短路径长度 */
  38. int v0 = 'A' - 65; /* 初始点是 A */
  39.  
  40. void main()
  41. {
  42. int final[N], i, v, w, min;
  43.  
  44. /* 初始化最短路径长度数据,所有数据都不是最终数据 */
  45. for (v = 0; v < N; v++) {
  46. final[v] = false;
  47. dist[v] = cost[v0][v];
  48. }
  49.  
  50. /* 首先选v0到v0的距离一定最短,最终数据 */
  51. final[v0] = true;
  52.  
  53. /* 寻找另外 N-1 个结点 */
  54. for (i = 0; i < N-1; i++) {
  55. min = I; /* 初始最短长度无穷大 */
  56.  
  57. /* 寻找最短的边 */
  58. for (w = 0; w < N; w++) {
  59. if (!final[w] && dist[w] < min) {
  60. min = dist[w];
  61. v = w;
  62. }
  63. }
  64. final[v] = true; /* 加入新边 */
  65.  
  66. for (w = 0; w < N; w++) { /* 更新 dist[] 数据 */
  67. if (!final[w] && dist[v] + cost[v][w] < dist[w]) {
  68. dist[w] = dist[v] + cost[v][w];
  69. }
  70. }
  71. }
  72.  
  73. for (i = 0; i < N; i++) { /* 显示到监视器 */
  74. printf("%c->%c: %2d\t", v0 + 65, i + 65, dist[i]);
  75. }
  76. }</span>

运行结果:

网络最短路径Dijkstra算法的更多相关文章

  1. 有向网络(带权的有向图)的最短路径Dijkstra算法

    什么是最短路径? 单源最短路径(所谓单源最短路径就是只指定一个顶点,最短路径是指其他顶点和这个顶点之间的路径的权值的最小值) 什么是最短路径问题? 给定一带权图,图中每条边的权值是非负的,代表着两顶点 ...

  2. 单源最短路径Dijkstra算法,多源最短路径Floyd算法

    1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...

  3. 最短路径-Dijkstra算法与Floyd算法

    一.最短路径 ①在非网图中,最短路径是指两顶点之间经历的边数最少的路径. AE:1    ADE:2   ADCE:3   ABCE:3 ②在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径 ...

  4. 数据结构实验之图论七:驴友计划 ( 最短路径 Dijkstra 算法 )

    数据结构实验之图论七:驴友计划 Time Limit: 1000 ms           Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...

  5. 最短路径——Dijkstra算法以及二叉堆优化(含证明)

    一般最短路径算法习惯性的分为两种:单源最短路径算法和全顶点之间最短路径.前者是计算出从一个点出发,到达所有其余可到达顶点的距离.后者是计算出图中所有点之间的路径距离. 单源最短路径 Dijkstra算 ...

  6. Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例

    本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...

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

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

  8. 单源最短路径——Dijkstra算法学习

    每次都以为自己理解了Dijkstra这个算法,但是过没多久又忘记了,这应该是第4.5次重温这个算法了. 这次是看的胡鹏的<地理信息系统>,看完之后突然意识到用数学公式表示算法流程是如此的好 ...

  9. 最短路径(Dijkstra算法)

    当用图结构来表示通信.交通等网络,权重代表距离或者成本,寻找最短路径就成为了一个重要的任务. 给定带权网络G=(V;E),源点s,对于其他所有顶点v,寻找s到v的最短路径,连接成一颗最短路径树.可以证 ...

随机推荐

  1. Storm并发机制详解

    本文可作为 <<Storm-分布式实时计算模式>>一书1.4节的读书笔记 在Storm中,一个task就可以理解为在集群中某个节点上运行的一个spout或者bolt实例. 记住 ...

  2. 4.0、Android Studio配置你的构建

    Android构建系统编译你的app资源和源码并且打包到APK中,你可以用来测试,部署,签名和发布.Android Studio使用Gradle,一个高级的构建套件,来自动化和管理构建进程,同时可以允 ...

  3. TCP的发送系列 — 发送缓存的管理(二)

    主要内容:从TCP层面判断发送缓存的申请是否合法,进程因缺少发送缓存而进行睡眠等待. 因为有发送缓存可写事件而被唤醒. 内核版本:3.15.2 我的博客:http://blog.csdn.net/zh ...

  4. Dynamics CRM 检测访问CRM延迟及带宽的工具

    直接在浏览器中访问如下地址"http://CRMHOST/organization/tools/diagnostics/diag.aspx"(这里的CRMHOST和organiza ...

  5. 【Unity技巧】四元数(Quaternion)和旋转

    四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法--矩阵旋转和欧拉旋转. ...

  6. Linux/Unix--设备类型

          在Linux以及所有的Unix系统中,设备被分为以下三种类型:       块设备       字符设备       网络设备        块设备通常写为 blkdev ,它是可以寻址的 ...

  7. linux2.6内核链表

    一.        链表数据结构简介      链表是一种常用的组织有序数据的数据结构,它通过指针将一系列数据节点连接成一条数据链,是线性表的一种重要实现方式.相对于数组,链表具有更好的动态性,建立链 ...

  8. 1.QT中播放视频,录音程序的编写

     1  通过process的方式播放视频 T22VideoPlayer.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gu ...

  9. 任务定义器——SocketProcessor

    将socket扔进线程池前需要定义好任务,要进行哪些逻辑处理由SocketProcessor定义,根据线程池的约定,作为任务必须扩展Runnable.用如下伪代码表示 protected class ...

  10. 【Unity Shaders】Lighting Models 介绍

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...