题目
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
.
解法
总的来说,就是数组的每个位是一个房间,房间中存有通往其他房间的钥匙,从0号房间开始,问是否能走完全部房间。于是马上想到了BFS算法,只要最后所有位置都visit过,就能够走完所有房间。
代码如下:
1 | bool canVisitAllRooms(vector<vector<int>>& rooms) { |