步骤 N1 D(v),p(v) D(w),p(w) D(x),p(x) D(y),p(y) D(z),p(z)
0 u 2,u 5,u 1,u 无穷大 无穷大
1 ux 2,u 4,x   2,x 无穷大
2 uxy 2,u 3,y     4,y
3 uxyv   3,y     4,y
4 uxyvw         4,y
5 uxyvwz          

D(o):随着算法进行本次迭代,从源节点到目的节点o的最低费用路径的费用。

p(o):从源节点到目的节点o沿着当前最低费用路径的前一节点(o的邻居)。

N1:节点子集,如果从源节点到目的节点o的最低费用路径已确知,o在N1中。

LS算法:

Initialization:

  N1 = {u}

  for all node o

    if o is a neighbor of u

      then D(o) = c(u,o)

    else D(v) = 无穷大

Loop

  find w not in N1 such that D(w) is a minium

  add w to N1

  update D(o) for each neighbor o of w  and not in N1:

      D(o) = min(D(o), D(o) + c(w,o))

/* new cost to o is either old cost to o or known  least path cost to w plus cost from w to o*/

until N1 = N

Java实现:

 1 public class Dijkstra {
2
3 private static int MAX = 1000;
4
5 /**
6 * @param args
7 */
8 public static void main(String[] args) {
9 dijkstra();
10 }
11
12 public static void dijkstra(){
13 //图的邻接矩阵
14 /* 节点到自身的距离为0,到非邻居节点的距离为MAX*/
15 int[][] matrix = {
16 {0, 2, 5, 1, MAX, MAX},
17 {2, 0, 3, 2, MAX, MAX},
18 {5, 3, 0, 3, 1, 5},
19 {1, 2, 3, 0, 1, MAX},
20 {MAX,MAX,1, 1, 0, 2},
21 {MAX,MAX,5, MAX,2, 0}
22 };
23
24 int[] isVisited = new int[6];
25 int[] dist = new int[6];
26 int[] pre = new int[6];
27
28 dist[0] = 0;
29 isVisited[0] = 1;
30
31 /* 初始化 距离向量*/
32 for (int i = 1; i < dist.length; i++) {
33 dist[i] = matrix[0][i];
34
35 /* 当前最低费用路径的前一节点为0 */
36 if (dist[i] < MAX) {
37 pre[i] = 0;
38 }
39 }
40
41 for(int j = 1; j < pre.length; j++){
42
43 /* 需找前一次的最短路径的节点 */
44 int minLen = MAX;
45 int n = 0;
46 for (int i = 1; i < dist.length; i++) {
47 /* 未被确认的节点 */
48 if (dist[i] < minLen && isVisited[i] == 0) {
49 minLen = dist[i];
50 /* 确定当前最低费用路径的前一节点*/
51 n = i;
52 }
53 }
54
55 /* 确认节点 */
56 isVisited[n] = 1;
57 /* 更新最短路径 */
58 for(int i = 1; i < dist.length; i++){
59 if (isVisited[i] == 0 && matrix[n][i] < MAX && dist[n] + matrix[n][i] < dist[i]) {
60 dist[i] = dist[n] + matrix[n][i];
61 pre[i] = n;
62 }
63 }
64
65 }
66
67 for (int i = 0; i < dist.length; i++) {
68 System.out.print(dist[i] + " ");
69 }
70 System.out.println();
71
72 int m = 5;
73 System.out.print(5 + " ");
74 while(pre[m] != 0){
75 System.out.print(pre[m] + " ");
76 m = pre[m];
77 }
78 System.out.print(0);
79 }
80 }

Dijkstra链路状态选路算法的更多相关文章

  1. 3.OSPF协议及链路状态算法

    OSPF的特点: 1.使用洪泛法向自治系统内所有路由器发送信息,即路由器通过输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再次将此信息发往其所有的相邻路由器.最终整个区域内所有路由器都得到了 ...

  2. s5-14 链路状态路由选择

    为什么DV逐渐让位于LS? DV  站的不高,看得不远  完全相信邻居 LS  想办法站得高,看更远  多高.多远?  怎么做? 链路状态路由(Link State) 主要思想 发现 它的邻 ...

  3. Dijkstra 单源最短路径算法

    Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...

  4. 最短路径—Dijkstra算法和Floyd算法

    原文链接:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最后边附有我根据文中Dijkstra算法的描述使用jav ...

  5. 最短路径—Dijkstra算法和Floyd算法【转】

    本文来自博客园的文章:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html Dijkstra算法 1.定义概览 Dijk ...

  6. OSPF(Open Shortest Path First开放式最短路径优先 -链路状态路由协议

    OSPF分为OSPFv2和OSPFv3两个版本,其中OSPFv2用在IPv4网络,OSPFv3用在IPv6网络 思科OSPF的协议管理距离(AD)是110,华为OSPF的协议管理距离是10 通告网络接 ...

  7. c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法

    c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...

  8. 最短路径——Dijkstra算法和Floyd算法

    Dijkstra算法概述 Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图(无 ...

  9. LwIP:处理链路状态改变

    [文/告别年代   Email:byeyear@hotmail.com] 重大修订记录 ----------------------------------------- 2016.11.03 感谢@ ...

随机推荐

  1. war项目依赖war项目

    还没有看,立个flag:https://my.oschina.net/u/588379/blog/1817077

  2. Eclipse配置反编译插件jadclipse

    参考自:https://blog.csdn.net/moneyshi/article/details/79715891 Jad是一个Java的一个反编译工具,是用命令行执行,和通常JDK自带的java ...

  3. VSCode 如何远程连接其他主机的 WSL2

    VSCode 如何远程连接其他主机的 WSL2 VSCode 的 Remote Deployment 插件对 WSL2 直接提供了支持,能够很方便的连接本机的 WSL2 ,但是并没有提供一个连接远程 ...

  4. python里面的垃圾回收机制

    文章链接:https://www.jianshu.com/p/1e375fb40506 Garbage collection(GC) 现在的高级语言如java,c#等,都采用了垃圾收集机制,而不再是c ...

  5. Oracle常用SQL语句大全

    常用Oracle数据库SQL语句汇总. 1.常用操作 --清空回收站purge recyclebin;--查询回收站select * from recyclebin--查询Oracle版本信息sele ...

  6. Python3.6安装protobuf模块+将proto文件转换成pb2.py文件

    Python对版本的对应即为苛刻,笔者第一次安装时遇到了很多坑,比如无法将proto文件转换成py文件,转换了之后文件无法使用,网上各种各样的解决办法都没有讲到重点.其实会出现各种各样的问题是由于版本 ...

  7. Xmanager7 xshell7 xftp7安装破解教程

    NetSarang Xmanager7 Power Suite是可以浏览远端X窗口系统的软件,远程把Unix/Linux的桌面无缝地带到Windows桌面上.旗下的Xshell Xftp插件是一款常用 ...

  8. 每日三道面试题,通往自由的道路14——MySQL

    茫茫人海千千万万,感谢这一秒你看到这里.希望我的面试题系列能对你的有所帮助!共勉! 愿你在未来的日子,保持热爱,奔赴山海! 每日三道面试题,成就更好自我 昨天我们是不是聊到了锁,而你提到了MySQL? ...

  9. 使用C#winform编写渗透测试工具--敏感目录扫描

    使用C#winform编写渗透测试工具--敏感目录扫描 由于之前在做渗透测试的时候,发现使用的工具较多,切换起来较麻烦,便萌生了开发一个包含各种渗透测试工具的小程序,包括敏感目录扫描.端口查询.子域名 ...

  10. CF201C Fragile Bridges TJ

    本题解依旧发布于洛谷,如果您能点个赞的话--(逃 前言 题目链接 正解:动态规划 思路不是很好想,想出来了应该就没有多大问题了,但是需要处理的细节较多,再加上水水的样例,难度应该是偏难的.个人感觉应该 ...