并查集 力扣 695. 岛屿的最大面积

695. 岛屿的最大面积

题目:
链接https://leetcode.cn/problems/max-area-of-island/

在这里插入图片描述
在这里插入图片描述
代码:

class Solution {
public:
    pair<int,int> f[51][51];
    int s[51][51];
    int n,m;
    int xy[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
    pair<int,int> getf(int x,int y){
        if(f[x][y].first==x&&f[x][y].second==y)return f[x][y];
        return f[x][y]=getf(f[x][y].first,f[x][y].second); 
    }
    void mer(int x , int y,int x2 ,int y2){
        pair<int,int> fx = getf(x,y),fy = getf(x2,y2);
        if(fx==fy)return;
        f[fx.first][fx.second] = fy;
        s[fy.first][fy.second] += s[fx.first][fx.second];
    }
    int maxAreaOfIsland(vector<vector<int>>& grid) {
        n = grid.size();
        m= grid[0].size();
        for(int i = 1 ; i <=n ; i++)
            for(int j = 1; j <=m;j++)
                if(grid[i-1][j-1]==1){
                    f[i][j]={i,j};
                    s[i][j] = 1;
                }
        for(int i = 1 ; i <=n ; i++){
            for(int j = 1; j <=m;j++){
                if(grid[i-1][j-1]==1)
                    for(int k=0;k<=3;k++){
                        int xj = i+xy[k][0],yj =j+xy[k][1];
                        if(xj<=0||xj>n||yj<=0||yj>m)continue;
                        if(grid[xj-1][yj-1]==1)mer(i,j,xj,yj);
                }
            }
        }
        int ans =0;
         for(int i = 1 ; i <= n ; i++){
            for(int j = 1 ; j <= m ; j++){
                if(grid[i-1][j-1] == 1)
                    ans = max(ans ,s[i][j]);
            }
        }
        return ans;
    }
};

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爪蛙毁一生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值