题解 | #岛屿数量#
岛屿数量
https://www.nowcoder.com/practice/0c9664d1554e466aa107d899418e814e
#include <cstring>
#include <type_traits>
class UnionFind{
private:
// int *nums;
public:
int *nums;
UnionFind(int n){
nums=new int[n];
for(int i=0;i<n;i++)nums[i]=i;
}
~UnionFind(){
delete [] nums;
}
int find(int x){
int k=x;
while(nums[k]!=k){
k=nums[k];
}
while(x!=k){
int t=nums[x];
nums[x]=k;
x=t;
}
return x;
}
bool isHB(int x,int y){
int a=find(x);
int b=find(y);
if(a!=b){
nums[a]=b;
return true;
}
return false;
}
};
class Solution {
public:
/**
* 判断岛屿数量
* @param grid char字符型vector<vector<>>
* @return int整型
*/
// int
int solve(vector<vector<char> >& grid) {
// write code here
int row=grid.size();
if(row==0) return 0;
int col=grid[0].size();
if(col==0) return 0;
int count=0;
UnionFind U(row*col+1);
for(int i=0;i<row;i++){
for(int j=0;j<col;j++){
if(grid[i][j]=='1'){
count++;
if(i+1<row && grid[i+1][j]=='1' && U.isHB(i*col+j, (i+1)*col+j)){
count--;
}
if(j+1<col && grid[i][j+1]=='1' && U.isHB(i*col+j, i*col+j+1)){
count--;
}
}
}
}
return count;
}
};
