題目描述
給一個有 n 個結點的有向無環圖,找到所有從 0 到 n-1 的路徑並輸出(不要求按順序)
二維數組的第 i 個數組中的單元都表示有向圖中 i 號結點所能到達的下一些結點(譯者注:有向圖是有方向的,即規定了a→b你就不能從b→a)空就是沒有下一個結點了。
輸入: [[1,2], [3], [3], []]
輸出: [[0,1,3],[0,2,3]]
解釋: 圖是這樣的:
0--->1
| |
v v
2--->3
這有兩條路: 0 -> 1 -> 3 和 0 -> 2 -> 3.
算法思路
這貌似是我第一次做圖的題,因爲是有向無環,所以從節點0出發一定可以走到節點n-1,這是道相對簡單的題。
我的第一思路就是將給定的參數化作字典,然後用回溯算法來解題,好比一個小人從0開始走,0所連接的其他節點就是小人見到的門,按順序進入門到下一個節點,到n-1結束,把記錄的路徑保存下來,然後往回走,從另一個門進入。
class Solution:
def allPathsSourceTarget(self, graph: List[List[int]]) -> List[List[int]]:
d={i:j for i,j in enumerate(graph)}
res=[]
def helper(t=[0]):
if not d[t[-1]]:
res.append(t)
for i in d[t[-1]]:
helper(t+[i])
helper()
return res
執行用時 :116 ms, 在所有 Python3 提交中擊敗了62.24%的用戶
內存消耗 :15.2 MB, 在所有 Python3 提交中擊敗了40.00%的用戶
哦,這個回溯算法也可以是深度優先搜索。