首页 > 编程语言 >Problem G: 距离向量算法(D-V)

Problem G: 距离向量算法(D-V)

时间:2023-04-24 21:35:03浏览次数:31  
标签:报文 距离 算法 RIP Problem 路由器 lineB 向量 路由表

Problem Description

RIP路由协议是一种分布式的基于距离向量的路由选择协议。
距离向量(D-V)算法:
收到相邻路由器(设其地址为 X)的一个 RIP 报文: 
① 先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。 
② 对修改后的RIP报文中的每一个项目,重复以下步骤:
若原来的路由表中没有目的网络N,则把该项目添加到路由表中;
否则(即在路由表中有目的网络N),若下一跳R路由器地址为X,则把收到的项目替换原路由表中的项目;
否则(即下一跳路由器不是X),若收到的项目中的距离d小于路由表中的距离,则进行更新。否则,什么也不做。 
③ 若 3 分钟还没有收到相邻Router的更新信息,则把此相邻Router标记为不可达的路由器,即把距离置为16(距离为16表示不可达)。
④ 返回。
现在假设有一台路由器B,收到邻居路由器C发送过来的RIP路由更新报文。编写程序:使用D-V算法更新路由器B的路由表。

Input Description

输入的第一行为两个正整数M、N(M,N<100),分别表示路由器B的路由表有M行,邻居路由器C发送过来的路由表有N行。
接下来的M+N行,每行包括3个字段:目的网络、距离、下一跳路由器。
前M行为路由器B的路由表,后N行为邻居路由器C发送过来的路由表。

Output Description

输出更新后路由器B的路由表,格式详见样例输出。

Sample Input

2 3
N1 3 C
N3 4 E
N1 3 D
N2 4 F
N3 1 -

Sample Output

N1 4 C
N2 5 C
N3 2 C

 1 m,n = map(int,input().split())
 2 lineB = []
 3 x = []
 4 i = 0
 5 j = 0
 6 for i in range(m):
 7     x = input().split()
 8     lineB.append(x)
 9 
10 for i in range(n):
11     flag = 0
12     x = input().split()
13     x[1] = int(x[1]) + 1
14     x[2] = 'C'
15     for j in lineB: #j作为迭代器,代表列表每个元素,j[0]即第一个元素的第一个元素
16         #在路由表中有目的网络N
17         if x[0] == j[0]:
18             flag = 1 #做标志
19             #若下一跳R路由器地址为X
20             if x[2] == j[2]:
21                 #把收到的项目替换原路由表中的项目
22                 lineB.remove(j)
23                 lineB.append(x)
24                 break
25             #下一跳路由器不是X
26             elif int(x[1])<int(j[1]):
27                 lineB.remove(j)
28                 lineB.append(x)
29                 break
30 
31     # 在路由表没有目的网络N(需要在遍历完路由器B后判断)
32     if flag == 0:
33         lineB.append(x)
34 
35 lineB.sort(key=lambda x:x[0])
36 
37 for j in lineB:
38     print(f"{j[0]} {j[1]} {j[2]}")

 

 

标签:报文,距离,算法,RIP,Problem,路由器,lineB,向量,路由表
From: https://www.cnblogs.com/hangsingplus/p/17350964.html

相关文章

  • java排序算法2(简单选择排序、堆排序)
    简单选择排序---不稳定选择排序在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后以此类推,直到所有元素均排序完毕。for(inti=0;i<arr.length;i++){//记录最小值下标位置intmin=i;for(intj=i+1;j<arr.leng......
  • 支持向量机上的核函数对比
    探索核函数在不同数据集上的表现导入模块importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlib.colorsimportListedColormapfromsklearnimportsvmfromsklearn.datasetsimportmake_circles,make_moons,make_blobs,make_classification创建数据集,定......
  • 【无人机三维路径规划】基于遗传算法实现无人机航迹规划附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • C#凹凸曲线求拐点算法
    凹凸曲线求拐点算法实现:代码:1publicstaticdoublediff(Func<double,double>f,doublex,doubleh)2{3return(f(x+h)-f(x-h))/(2*h);4}56publicstaticdoublediff2(Func<double,double>f,......
  • Problem I: base64编码
    ProblemDescription对于任意二进制文件(如图像、声音、视频、程序等),都可以用base64编码。base64编码方法:先把二进制代码划分为一系列24位长的单元,然后把每一个24位单元划分为4个6位的组。每一个6位组按下列方法转换为ASCII码。6位二进制有64个不同的值,0-63。用A表示0,B表示1,等。2......
  • BSGS(大步小步算法)学习笔记
    解决高次同余问题。\(a^x\equivb(\modp)\),其中\(a\)与\(p\)同余。这个形式与欧拉定理类似。思想:meetinthemiddle(折半搜索)。具体的,令\(x=A\timest-B\),且\(x\)一定在\([0,\phi(p))\)的范围内。但是\(p\)是质数时复杂度还是会爆炸。将\(x=A\timest-B\)带入......
  • Problem D: IP地址合法性和网络类别检查
    1defIslegal(a):2ip=list(map(int,a))3flag=0#标志是否合法4if0<=ip[0]<=255:5if0<=ip[1]<=255:6if0<=ip[2]<=255:7if0<=ip[3]<=255:8......
  • 浅谈秦九韶算法
    浅谈秦九韶算法好像FFT要用到,所以就学习一下听说还是高中必修三的内容?目录浅谈秦九韶算法秦九韶算法的应用:code秦九韶算法的应用:当我们知道\(x\)的值时,求下列式子的值:\[f(x)=a_0+a_1x+a_2x^2+a_3x^3+\cdots+a_{n-1}x^{n-1}+a_nx^n\]一开始看到这个式子......
  • Problem E: 计算网络地址
    1defcalculate(m,n):2ans=[]3a=m.split('.',3)4b=n.split('.',3)5ip=list(map(int,a))6mask=list(map(int,b))7foriinrange(4):8x=ip[i]&mask[i]9ans.append......
  • 利用注册表限制TLS加密算法
    SChannelSSP是window实现TLS、DTLS和SSL协议的版本。不同的Windows发行版支持不同的协议版本启动注册表编辑器(Regedt32.exe),并找到以下注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Ciphers例如TripleDES168子项是D......