มี rooms รายการกุญแจในแต่ละห้อง ห้อง 0 เปิดอยู่ ตรวจสอบว่าเดินไปเปิดห้องอื่นได้หมดหรือไม่
เช่น rooms=[[2,0],[3],[1],[]] ให้ True (0→2→1→3)
ขั้นตอนการแก้ปัญหา
- DFS/BFS จากห้อง 0: เก็บ
readyห้องที่จะไป,seenห้องที่ไปแล้ว - Pop ห้องจาก ready, เพิ่มกุญแจที่ยังไม่ได้ไปเข้า ready
- ท้ายสุดถ้า
len(seen) == nคืน True
ตัวอย่างโค้ด
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