当前位置: 代码迷 >> 综合 >> LeetCode 1298. 你能从盒子里获得的最大糖果数 (模拟、BFS)
  详细解决方案

LeetCode 1298. 你能从盒子里获得的最大糖果数 (模拟、BFS)

热度:70   发布时间:2024-02-06 01:00:15.0

你能从盒子里获得的最大糖果数

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;}
};