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