Keys and Rooms
第11天。
今天的题目是Keys and Rooms:
There are N
rooms and you start in room 0
. Each room has a distinct number in 0, 1, 2, ..., N-1
, and each room may have some keys to access the next room.
Formally, each room i
has a list of keys rooms[i]
, and each key rooms[i][j]
is an integer in [0, 1, ..., N-1]
where N = rooms.length
. A key rooms[i][j] = v
opens the room with number v
.
Initially, all the rooms start locked (except for room 0
).
You can walk back and forth between rooms freely.
Return true
if and only if you can enter every room.
Example 1:
1 | Input: [[1],[2],[3],[]] |
Example 2:
1 | Input: [[1,3],[3,0,1],[2],[0]] |
Note:
1 <= rooms.length <= 1000
0 <= rooms[i].length <= 1000
- The number of keys in all rooms combined is at most
3000
.
很简单的一道题,仔细分析一下题目的话,就会发现这个输入其实构成一张图,rooms[i]
表示从第i
个节点出发走向的节点列表。然后这个问题就转变成,从0
号节点出发,能不能遍历完所有节点的问题了,这个问题直接无脑dfs
就好了,实现代码如下:
1 | bool canVisitAllRooms(vector<vector<int>>& rooms) { |