链接
841. 钥匙和房间
题目
示例
说明
- n == rooms.length
- 2 <= n <= 1000
- 0 <= rooms[i].length <= 1000
- 1 <= sum(rooms[i].length) <= 3000
- 0 <= rooms[i][j] < n
- 所有 rooms[i] 的值 互不相同
思路
设置一个辅助数组flags记录每个房间是否已经访问,然后DFS,访问过的设置成1,最后遍历flags数组,判断是否还存在没访问过的房间。
C++ Code
class Solution {
public:
void dfs(int i,vector<vector<int>>& rooms,vector<int>& flags){
vector<int> temp=rooms[i];;
if(flags[i]==1) return;
flags[i]=1;
for(int a=0;a<temp.size();a++)
{
dfs(temp[a],rooms,flags);
}
}
bool canVisitAllRooms(vector<vector<int>>& rooms) {
vector<int> flags(rooms.size(),0);
dfs(0,rooms,flags);
for(int i=0;i<flags.size();i++)
{
if(flags[i]==0) return false;
}
return true;
}
};