本文主要是介绍LeetCode851. 喧闹和富有(DFS+记忆化搜索),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这题的意思是从每个节点出发,进行dfs,然后找出连通的结点中quiet值最小的那个点,这题采用记忆化搜索,对于每次dfs,返回当前节点及之后节点中quiet值最小的那个节点的编号。若已经访问过,则直接返回ans中的值。
代码:
class Solution {
public:int g[505][505];int vis[505];int dfs(vector<vector<int>>& richer, vector<int>&quiet,vector<int>&ans,int v){if(vis[v])return ans[v]; vis[v]=1;int tmp=v; //记录从当前节点开始搜索,quiet值最小的结点编号,初始为自己for(int i=0;i<quiet.size();i++){if(g[v][i]){int q=dfs(richer,quiet,ans,i);if(quiet[q]<quiet[tmp])tmp=q;}} ans[v]=tmp; //更新答案return tmp;}vector<int> loudAndRich(vector<vector<int>>& richer, vector<int>& quiet) {int size=quiet.size();for(auto e:richer)g[e[1]][e[0]]=1;vector<int>ans(size,0);for(int i=0;i<size;i++)dfs(richer,quiet,ans,i);return ans;}
};
这篇关于LeetCode851. 喧闹和富有(DFS+记忆化搜索)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!