Python 程式檢查是否可以解鎖所有房間
假設我們有一個稱為 rooms 的列表列表。rooms 中的每個索引 i 代表一個房間,rooms[i] 代表開啟其他房間的不同鑰匙。房間 0 是開啟的,我們在這個房間裡,其他所有房間都鎖著。我們可以在開啟的房間之間自由移動;我們必須檢查是否可以開啟每個房間。
因此,如果輸入類似於 rooms = [[2, 0], [3],[1],[]],則輸出將為 True,因為我們從房間 0 開始,可以使用其鑰匙 2 轉到房間 2。從房間 2,我們可以轉到房間 1。然後,獲取房間 3 的鑰匙並開啟它。因此,所有房間都打開了。
要解決此問題,我們將遵循以下步驟
- n := rooms 的大小
- ready := 一個包含單個元素 0 的列表
- seen := 一個新的集合
- 當 ready 不為空時,執行以下操作
- u := ready 的最後一個元素,並將其從 ready 中刪除
- 將 u 標記為已檢視
- 對於 rooms[u] 中的每個 v,執行以下操作
- 如果 v 未被檢視,則
- 將 v 插入到 ready 的末尾
- 如果 v 未被檢視,則
- 當 seen 的大小與 n 相同時返回 true,否則返回 false。
讓我們檢視以下實現以獲得更好的理解
示例
class Solution: def solve(self, rooms): n = len(rooms) ready = [0] seen = set() while ready: u = ready.pop() seen.add(u) for v in rooms[u]: if v not in seen: ready.append(v) return len(seen) == n ob = Solution() rooms = [ [2, 0], [3], [1], [] ] print(ob.solve(rooms))
輸入
rooms = [[2, 0],[3],[1],[]]
輸出
True
廣告