要求:根据图,输入两个任意顶点a,b,输出所有a->b的路径。
a.首先定义一个矩阵描述这个图
class matrix:
def __init__(self, n):
self._Vnum = n
self._d = self.init(self._Vnum)
@staticmethod
def init(n):
d = []
for i in range(0, n):
t = []
for j in range(0, n):
t.append(0)
d.append(t)
return d
def set(self, b, e, weight):
if b == e:
print('没有边从自己到自己')
return
elif b > self._Vnum or e > self._Vnum:
print('错误的输入')
return
self._d[b-1][e-1] = weight
b.dfs的实现(arr.pop() 换成arr=arr[:-1]可行吗?如果不可行,是为什么)
def path(self, b, e):
self.dfs(b-1, e-1, {}, [])
def dfs(self, b, e, visit, arr):
if visit.get(b):
return
if b == e:
print(arr)
return
else:
visit[b] = True
for i in range(0, self._Vnum):
if 0 == self._d[b][i]:
continue
t = [b+1,i+1, self._d[b][i]]
arr.append(t)
self.dfs(i, e, visit, arr)
arr.pop()
visit[b] = False
c.最后根据图构造一下矩阵
m = matrix(6)
m.set(1,2,5)
m.set(1,4,7)
m.set(2,3,4)
m.set(3,1,8)
m.set(3,6,9)
m.set(4,3,5)
m.set(4,6,6)
m.set(5,4,5)
m.set(6,1,3)
m.set(6,5,1)
print('1 - 6:')
m.path(1,6)
print('6 - 1:')
m.path(6,1)
m.path(1,6)是求顶点1到顶点6的所有路径
m.path(6,1)是求顶点6到顶点1的所有路径
结果如图:
ps:同理可以构造几条交叉的地铁线路,用来简单寻路