【题目】


1 <= sum(rooms[i].length) <= 3000
0 <= rooms[i][j] < n
所有 rooms[i] 的值 互不相同
【代码】
【方法1】深度优先搜索

class Solution:
def canVisitAllRooms(self, rooms: List[List[int]]) -> bool:
visited=[0 for i in range(len(rooms))]
def dfs(x):
visited[x]=1
for item in rooms[x]:
if visited[item]==0:
dfs(item)
dfs(0)
return sum(visited)==len(visited)
【方法2】普通模拟

class Solution:
def canVisitAllRooms(self, rooms: List[List[int]]) -> bool:
visited=[0 for i in range(len(rooms))]
visited[0]=1
keys=set(rooms[0])
prelen=-1
while prelen!=len(keys):
prelen=len(keys)
for key in keys:
visited[key]=1
keys=keys|set(rooms[key])
return sum(visited)==len(visited)
【方法3】

class Solution:
def canVisitAllRooms(self, rooms: List[List[int]]) -> bool:
visited=[0 for i in range(len(rooms))]
keys=[0]
while keys:
item=keys.pop(0)
visited[item]=1
for key in rooms[item]:
if visited[key]==0:
keys.append(key)
return sum(visited)==len(visited)
本文探讨了三种方法解决房间探索问题,包括深度优先搜索(DFS)、普通模拟法和优先级队列的解决方案。通过实例展示了如何判断是否能访问所有房间,核心在于路径遍历策略和状态管理。
847

被折叠的 条评论
为什么被折叠?



