建造最大岛屿

import collections
direction = [[0,1],[1,0],[-1,0],[0,-1]]
area = 0
def dfs(grap,x,y,visit,num):
    if visit[x][y] :
        return 
    global area
    area+=1
    visit[x][y] = True
    grap[x][y] = num
    for i ,j in direction:
        curx = i+x
        cury = j+y
        if 0<=curx<len(grap) and 0<=cury<len(grap[0]) and grap[curx][cury] == 1:
            dfs(grap,curx,cury,visit,num)




def main():
    global area
    n,m = map(int,input().split())
    grap = []
    visit = [[False]*m for i in range(n)]
    num = collections.defaultdict(int)
    cnt = 2
    for i in range(n):
        grap.append(list(map(int,input().split())))
    for i in range(n):
        for j in range(m):
            if grap[i][j] == 1:
                area = 0
                dfs(grap,i,j,visit,cnt)
                num[cnt] = area
                cnt += 1
    res = 0
    for i in range(n):
        for j in range(m):
            if grap[i][j] == 0:
                maxnum = 1
                a = set()
                for k,t in direction:
                    if 0<=i+k<len(grap) and 0<= j+t <len(grap[0]) and grap[i+k][j+t] !=0 and grap[i+k][j+t] not in a:
                        a.add(grap[i+k][j+t])
                        maxnum += num[grap[i+k][j+t]]
                res = max(res,maxnum)
    if res == 0:
        return max(num.values())
    return res

if __name__ == '__main__':
    print(main())

104. 建造最大岛屿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值