【力扣】797:所有可能的路徑 | 圖| 回溯算法

題目描述

給一個有 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 -> 30 -> 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%的用戶

哦,這個回溯算法也可以是深度優先搜索。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章