关键点
进一个房间 删除已经用过的钥匙
从房间拿钥匙时 只拿还没开房门的钥匙
举例
[[1,3],[3,0,1],[2],[0]]
有钥匙0,进入0房间,扔掉钥匙0,拿到钥匙1和3
利用钥匙1和3进入1房间和3房间,扔掉钥匙1和3,拿不到未开房门的钥匙
没有钥匙了,发现房间二没开门
返回false
代码
class Solution(object):
def canVisitAllRooms(self, rooms):
"""
:type rooms: List[List[int]]
:rtype: bool
"""
room_open=[0 for _ in range(len(rooms))]
key_s={}
key_s[0]=1
while(len(key_s.keys())!=0):
old_keys=[]
new_keys=[]
for key in key_s.keys():
room_open[key]=1
old_keys.append(key)
for newkey in rooms[key]:
if(room_open[newkey]==0):
new_keys.append(newkey)
for m in old_keys:
key_s.pop(m)
for j in new_keys:
key_s[j]=1
for result in room_open:
if(result==0):
return False
return True