题目链接:https://leetcode-cn.com/problems/keys-and-rooms/
用栈更好搞,只要有钥匙且没被遍历过的房间就入栈,每次取栈顶元素继续遍历。
代码如下:
class Solution {
public:
bool canVisitAllRooms(vector<vector<int>>& rooms) {
stack<int> s;
bool vis[rooms.size()];
fill(vis, vis + rooms.size(), 0);
for(int i = 0; i < rooms[0].size(); i++) {
s.push(rooms[0][i]);
}
vis[0] = true;
while(!s.empty()) {
int k = s.top();
s.pop();
if(!vis[k]) {
vis[k] = true;
for(int i = 0; i < rooms[k].size(); i++) {
if(!vis[rooms[k][i]]) s.push(rooms[k][i]);
}
}
}
for(int i = 0; i < rooms.size(); i++) {
if(!vis[i]) {
return false;
}
}
return true;
}
};