Dijkstra链路状态选路算法
步骤 | 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链路状态选路算法的更多相关文章
- 3.OSPF协议及链路状态算法
OSPF的特点: 1.使用洪泛法向自治系统内所有路由器发送信息,即路由器通过输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又再次将此信息发往其所有的相邻路由器.最终整个区域内所有路由器都得到了 ...
- s5-14 链路状态路由选择
为什么DV逐渐让位于LS? DV 站的不高,看得不远 完全相信邻居 LS 想办法站得高,看更远 多高.多远? 怎么做? 链路状态路由(Link State) 主要思想 发现 它的邻 ...
- Dijkstra 单源最短路径算法
Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...
- 最短路径—Dijkstra算法和Floyd算法
原文链接:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html 最后边附有我根据文中Dijkstra算法的描述使用jav ...
- 最短路径—Dijkstra算法和Floyd算法【转】
本文来自博客园的文章:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html Dijkstra算法 1.定义概览 Dijk ...
- OSPF(Open Shortest Path First开放式最短路径优先 -链路状态路由协议
OSPF分为OSPFv2和OSPFv3两个版本,其中OSPFv2用在IPv4网络,OSPFv3用在IPv6网络 思科OSPF的协议管理距离(AD)是110,华为OSPF的协议管理距离是10 通告网络接 ...
- c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法
c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...
- 最短路径——Dijkstra算法和Floyd算法
Dijkstra算法概述 Dijkstra算法是由荷兰计算机科学家狄克斯特拉(Dijkstra)于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图(无 ...
- LwIP:处理链路状态改变
[文/告别年代 Email:byeyear@hotmail.com] 重大修订记录 ----------------------------------------- 2016.11.03 感谢@ ...
随机推荐
- File类与常用IO流第一章File类
第一章:File类 一.1个重点单词: file:文件:directory:文件夹/目录:path:路径(绝对路径:absolutePath) 二.4个静态成员变量: 1.static String ...
- 2021 MySQL安装教程(最新教程)- 含网盘下载
大家好,我是 我玩亚索我会C.最近电脑重装系统了,然后就想着装个MySQL,由于很久没装过了,于是上网搜索了教程,但是发现现在MySQL安装和之前的不一样了,网上都是旧版的安装教程,所以我就做一篇新版 ...
- vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
前言: 此事例是在vue组件中,使用canvas实现倒计时动画的效果.其实,实现效果的逻辑跟vue没有关系,只要读懂canvas如何实现效果的这部分逻辑就可以了 canvas动画的原理:利用定时器,给 ...
- mysql免安装版下载及安装教程
第一步:下载 下载地址:http://dev.mysql.com/downloads/mysql/ 点击图中红色箭头Archives,可以下载自己想要的mysql版本,如图: 下载后解压,放在自己想要 ...
- Python -- 值转换为字符串的两种机制
可以通过以下两个函数来使用这两种机制:一是通过str函数,它会把值转换为合理形式的字符串,以便用户可以理解:而repr会创建一个字符串,它以合法的Python表达式的形式来表示值.下面是一些例子: & ...
- 【阅读笔记】Java核心技术卷一 #6.Chapter8
8 泛型程序设计 8.1 为什么要使用泛型程序设计 类型参数(type parameters)(E.T.S...) 通配符类型(wildcard type)(?) 注意这两者用法用处并不同. 8.2 ...
- Spring in Action学习笔记(1)
Spring基础 IoC 控制反转, 也称为DI-依赖注入 一.装配bean 推荐顺序:自动装配 -> JavaConfig装配 -> XML装配 1. 自动装配 @Component 注 ...
- css伪类(:before和:after)
:before和:after的作用就是在指定的元素内容(而不是元素本身)之前或者之后插入一个包含content属性指定内容的行内元素,最基本的用法如下: #example{ width:300p ...
- 靶机CH4INRULZ_v1.0.1
nmap开路. root@kali:~# nmap -sP 192.168.1.* //拿到靶机地址192.168.1.8 root@kali:~# nmap -p- -sS -v -sV 192.1 ...
- 字节跳动Android春招,三轮面试,夺命连环问,心态崩了
我是春招参加字节面试的,现在已经入职俩月啦,当时没有及时记录下来拖到现在...我尽量回忆当时的内容希望能帮到大家. 投的部门是深圳字节影像,不得不说这个部门的效率,上午投下午就接到hr的电话约面试时间 ...