题目:
代码(首刷看解析):
class Solution {
public:
vector<int> vis;
int num=0;
void dfs(vector<vector<int>> &rooms,int x){
vis[x]=true;
num++;
for(auto& it :rooms[x]){
if(!vis[it]){
dfs(rooms,it);
}
}
}
bool canVisitAllRooms(vector<vector<int>>& rooms) {
int n = rooms.size();
vis.resize(n);
dfs(rooms,0);
return num==n;
}
};
代码(二刷自解 2024年3月19日)
class Solution {
public:
bool canVisitAllRooms(const vector<vector<int>>& rooms) {
vector<bool> visited(rooms.size(), false);
visited[0] = true;
queue<int> q;
q.push(0);
// BFS
int count = 0;
while (!q.empty())
{
// 进入一个房间
int room = q.front();
q.pop();
count++;
// 获得钥匙,未标记的钥匙加入q
for (int i = 0; i < rooms[room].size(); ++i)
{
if (!visited[rooms[room][i]])
{
q.push(rooms[room][i]);
visited[rooms[room][i]] = true;
}
}
}
return count == rooms.size();
}
};