class Solution {
public:
int maxCandies(vector<int>& status, vector<int>& candies, vector<vector<int>>& keys, vector<vector<int>>& containedBoxes, vector<int>& initialBoxes) {
bool keysExist[1010] = {0}, boxesExist[1010] = {0}, boxesVis[1010] = {0};
queue<int> q;
for(int x:initialBoxes){
boxesExist[x] = 1;
if(status[x]){
q.push(x);
boxesVis[x] = 1;
}
}
int ans = 0, n = status.size();
while(q.size()){
int size = q.size();{
int x = q.front();
q.pop();
// 糖果数增加
ans += candies[x];
//盒子数增加
for(int y:containedBoxes[x]){
boxesExist[y] = 1;
if(status[y] && !boxesVis[y]){
q.push(y);
boxesVis[y] = 1;
}
}
for(int k:keys[x]){
keysExist[k] = 1;
}
}
for(int i=0;i<n;i++){
if(!boxesVis[i] && keysExist[i] && boxesExist[i]){
q.push(i);
boxesVis[i] = 1;
}
}
}
return ans;
}
};
LeetCode 1298. 你能从盒子里获得的最大糖果数 (模拟、BFS)
最新推荐文章于 2020-11-27 21:25:15 发布
本文深入探讨了一种算法,该算法旨在从一系列盒子中获取最大数量的糖果。通过跟踪盒子状态、钥匙持有情况和已访问盒子,算法有效地计算了可获取的糖果总数。涉及的数据结构包括队列和布尔数组,用于更新和检查盒子的状态。


796

被折叠的 条评论
为什么被折叠?



