标签:return int 查集 father isConnected vector find
547. 省份数量 - 力扣(LeetCode) (leetcode-cn.com)
1 class Solution { 2 public: 3 vector<int>father; 4 int find(int x){ 5 if(father[x]==x) 6 return x; 7 return find(father[x]); 8 } 9 void tunion(int a,int b){ 10 father[find(b)] = find(a); 11 } 12 int findCircleNum(vector<vector<int>>& isConnected) { 13 int n = isConnected.size(); 14 father = vector<int>(n); 15 for (int i=0;i<n;i++){ 16 father[i] = i; 17 for (int j=0;j<i;j++){ 18 if(isConnected[i][j] == 1){ 19 tunion(j,i); 20 } 21 } 22 } 23 vector<int>vis(n,0); 24 int ans = 0; 25 for(int i=0;i<n;i++){ 26 if(vis[i] == 1) 27 continue ; 28 ans++;vis[i] = 1; 29 for(int j=i+1;j<n;j++){ 30 if(find(i) == find(j)){ 31 vis[j] = 1; 32 } 33 } 34 } 35 return ans; 36 } 37 };View Code
find那里可以递归也可以while循环
union那里在函数里找祖先也可以在主函数里找祖先
我这边习惯主函数简洁
标签:return,int,查集,father,isConnected,vector,find 来源: https://www.cnblogs.com/hcl6/p/16189024.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。