用于检查我们是否可以在python中解锁所有房间的程序

假设我们有一个称为房间的列表列表。rooms 中的每个索引 i 代表一个房间,rooms[i] 代表打开其他房间的不同键。房间 0 是开放的,我们在那个房间,其他房间都被锁上了。我们可以在打开的房间之间自由移动;我们必须检查我们是否可以打开每个房间。

因此,如果输入类似于 rooms = [[2, 0], [3],[1],[]],那么输出将为 True,因为我们从房间 0 开始,可以用它的钥匙去房间 2 2. 从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