LeetCode 928. 尽量减少恶意软件的传播 II(广搜遍历图+暴力模拟)

    技术2025-06-26  11

    尽量减少恶意软件的传播 II 做法很朴素,就是按照题目的意思进行模拟: 枚举删除某一个点,然后将所有源点(除去删除点) 加入宽搜的队列,然后一直拓展(注意搜索的过程中不能将删除点加入队列),然后统计所有被感染的点的数目,更新答案。 一个小注意点: 用int vis[]记录下已经入队的节点,防止冗余搜索!

    class Solution { public: vector<int> graph[310]; int mmin = 1000,ans = -1; int minMalwareSpread(vector<vector<int>>& g, vector<int>& initial) { sort(initial.begin(),initial.end()); reverse(initial.begin(),initial.end()); int n = g.size(); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(g[i][j]){ graph[i].push_back(j); } } } for(int no:initial){ queue<int> q; unordered_set<int> color; int vis[310] = {0}; for(int x:initial){ if(x==no){ continue; } q.push(x); vis[x] = 1; color.insert(x); } while(!q.empty()){ int x = q.front(); q.pop(); if(x==no){ continue; } for(int y:graph[x]){ if(y==no){ continue; } if(!vis[y]){ q.push(y); vis[y] = 1; color.insert(y); } } } if(color.size()<=mmin){ mmin = color.size(); ans = no; } } return ans; } };
    Processed: 0.009, SQL: 9