用于检查我们是否可以在python中解锁所有房间的程序
假设我们有一个称为房间的列表列表。rooms中的每个索引i代表一个房间,rooms[i]代表打开其他房间的不同键。房间0是开放的,我们在那个房间,其他房间都被锁上了。我们可以在打开的房间之间自由移动;我们必须检查我们是否可以打开每个房间。
因此,如果输入类似于rooms=[[2,0],[3],[1],[]],那么输出将为True,因为我们从房间0开始,可以用它的钥匙去房间22.从2号房可以到1号房,然后拿3号房的钥匙打开。所以都打开了。
为了解决这个问题,我们将按照以下步骤操作:
n:=房间大小
准备好:=单个元素0的列表
看到:=一组新的
而ready不是空的,做
如果没有看到v,那么
在准备好的末尾插入v
u:=ready的最后一个元素并将其从ready中删除
将你标记为所见
对于房间[u]中的每个v,做
当看到的大小与n相同时返回真,否则返回假。
让我们看下面的实现来更好地理解:
示例
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