LS链路状态路由算法

Link-State链路状态路由算法又被称为Dijkstra算法,可计算在网络中从一个节点到所有其他节点的最短路径,特性是经过k次循环可以得知到达k个目的节点的最短路径。


下面看下书上的LS算法的伪代码

d(v):从源节点到达目标v的最短路径的距离。

N':节点的子集;v在N'中如果从源节点到v的最短路径已知。

c(u,v):网络中给出的u, v节点之间的距离。

//LS Algorithm for Source Node u
Initialization:
       N' = {u}
       for all nodes v
	    if v is a neighbor of u
		   then d(v) = c(u, v);
	    else d(v) = MAX;
Loop
      find w not in N' such that d(w) is a minimum 
      add w to N'
      update d(v) for each neighbor v of w and not in N':
            d(v) = min( d(v), d(w) + c(w, v) ) 
until N' = N


代码实现 如下:

因为我用来实现LS路由算法,所以用next数组记录了下一跳路由信息。pc数组表示网络连接情况,MAX代表不连通。运行之后d数组的值就更新成了源节点s到各目标节点的最短距离了。

#define MAX 30000
int pc[5][5] = {0, 2, 1, MAX, MAX,
                2, 0, 2, 3, MAX,
                1, 2, 0, 3, 1,
                MAX, 3, 3, 0, 1,
                MAX, MAX, 1, 1, 0};

void routerLS(int s){ //s为开始点 
    int flag[5];    //N'
    int d[5];       //距离 
    int next[5];    //下一跳 
    for(int i = 0; i < 5; i++){  //初始化 
	   	d[i] = pc[s][i];	   	
    	flag[i] = 0;
    	next[i] = i;
	} 
	flag[s] = 1;
	int k = s, min;  
	for(int i = 0; i < 5; i++){
		min = MAX;
		for(int j = 0; j < 5; j++){   //找出最小值d[k] 
			if(d[j] < min && flag[j] == 0){
				min = d[j];
				k = j;
			}
		}
		if(k == s)  //k值没有改变说明没有邻居 	        
		   return ;
		flag[k] = 1;
		for(int j = 0; j < 5; j++){  	//更新邻边 
			if(d[j] > d[k] + pc[k][j] && flag[j] == 0){
				d[j] = d[k] + pc[k][j];
				next[j] = next[k];
			}
		}
	}	
} 



  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LS(Link State)链路状态算法是一种计算最短路径的网络路由算法。一个典型的例子是在一个局域网中计算最短路径。 假设有一个由5个路由器组成的局域网,每个路由器都需要选择一条最短路径来转发数据包到目的地。这个网络的拓扑结构如下图所示: ``` +---+ 2 +---+ | A |------------| B | +---+ +---+ | | 1 | | 1 | | +---+ +---+ | C |------------| D | +---+ 3 +---+ ``` 假设 A, B, C, D 和 E 分别代表上图中的 5 个路由器,而数字代表路由器之间的距离,即链路状态(Link State)。为了计算最短路径,每个路由器需要了解整个网络的拓扑结构和链路状态。因此,每个路由器需要发送链路状态数据包给其他路由器,并接收其他路由器发送的链路状态数据包。通过这些数据包,每个路由器可以建立一个网络拓扑图,并使用 Dijkstra 算法来计算最短路径。 例如,假设路由器 A 需要将数据包转发到路由器 D。路由器 A 会先发送链路状态数据包给其他路由器,并接收其他路由器发送的链路状态数据包。然后,路由器 A 可以建立如下的网络拓扑图: ``` +---+ 2 +---+ | A |------------| B | +---+ 1 +---+ | | +---+ 3 +---+ | C |------------| D | +---+ +---+ ``` 在这个网络拓扑图中,每个节点代表一个路由器,每个边代表一条链路。每个边上的数字代表链路状态,即链路的距离。为了计算最短路径,路由器 A 可以使用 Dijkstra 算法,从自己开始,依次遍历每个节点,并计算到每个节点的最短路径。最终,路由器 A 可以得到到路由器 D 的最短路径为 A-C-D,距离为 4。 LS 链路状态算法的优点是能够计算出全局最短路径,但缺点是需要大量的链路状态数据包来建立网络拓扑图,因此在大规模网络中可能会出现性能问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值