SDN topo-求两点间的所有路径 Python 3求两点间所有路径----深度优先算法(Depth-First-Search)
在Python中,对于求两点间的所有路径的深度优先算法是需要用到邻接矩阵的。
邻接矩阵在Java中可以直接创建一个二维数组,但在Python中就需要一个特殊的申明:、
li = [[0] * len(nodes) for i in range(len(nodes))]
对于邻接矩阵的生成,主要还是看数据,我用到的数据是Ryu生成的节点信息nodes,和链路信息links:
nodes = set(['00:00:00:00:00:03', 1, 2, 3, 4, 5, '00:00:00:00:00:04', '00:00:00:00:00:01', '00:00:00:00:00:02'])
links = {(1, 2): (2, 2), (1, '00:00:00:00:00:01'): (1, None), (4, '00:00:00:00:00:04'): (1, None),
(3, '00:00:00:00:00:03'): (1, None), ('00:00:00:00:00:02', 2): (None, 1), (3, 2): (2, 3), (1, 4): (3, 3),
('00:00:00:00:00:04', 4): (None, 1), (1, 5): (4, 1), (2, '00:00:00:00:00:02'): (1, None), (2, 3): (3, 2),
(2, 1): (2, 2), ('00:00:00:00:00:01', 1): (None, 1), (5, 1): (1, 4), ('00:00:00:00:00:03', 3): (None, 1),
(3, 5): (4, 2), (5, 3): (2, 4)}
当然可以用其他数据来构建邻接矩阵,算法另找。
用nodes信息生成映射表,'00:00:00:00:00:03','00:00:00:00:00:04', '00:00:00:00:00:01', '00:00:00:00:00:02'是主机, 1, 2, 3, 4, 5是交换机。
yingshe = {}
j = 0
for i in nodes:
yingshe[i] = j
j += 1
再根据links,生成邻接矩阵:
i = 0
for i in links:
li[yingshe[i[0]]][yingshe[i[1]]] = 1
当然,我们也可以打印出来看看生成的邻接矩阵:
k = 0
for i in li:
print(k, end='\t')
for j in i:
print(j, end="\t")
print()
k += 1
0 0 1 0 1 1 0 0 0
1 1 0 1 0 0 1 0 0
2 0 1 0 1 0 0 0 1
3 1 0 1 0 0 0 1 0
4 1 0 0 0 0 0 0 0
5 0 1 0 0 0 0 0 0
6 0 0 0 1 0 0 0 0
7 &

该博客介绍了如何在SDN拓扑中使用Python 3通过深度优先搜索算法(DFS)找出两点间的所有可能路径。首先,通过Ryu控制器获取的节点和链路信息构建邻接矩阵,然后利用自定义栈函数和递归实现DFS。最终,展示了从特定起点到目标节点的不同路径示例。
&spm=1001.2101.3001.5002&articleId=90347990&d=1&t=3&u=eaaf8f97eaf2466b89edccea29a0b2c4)
872

被折叠的 条评论
为什么被折叠?



