1. 程式人生 > 其它 >深度優先搜尋演算法解決尋路問題

深度優先搜尋演算法解決尋路問題

技術標籤:pythonpython

要求:根據圖,輸入兩個任意頂點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:同理可以構造幾條交叉的地鐵線路,用來簡單尋路