【题目】
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)