深度優先搜尋演算法解決尋路問題
阿新 • • 發佈:2020-12-11
要求:根據圖,輸入兩個任意頂點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:同理可以構造幾條交叉的地鐵線路,用來簡單尋路