LC695. 岛屿的最大面积

这篇博客介绍了两种常见的图遍历算法——深度优先搜索(DFS)和广度优先搜索(BFS),并展示了它们在计算二维网格中最大岛屿面积问题的应用。通过Python代码实现,DFS和BFS分别被用来遍历网格,找出所有相连的1(表示陆地)并计算其面积。最后,返回最大的岛屿面积。这两种算法在解决此类问题时各有优劣,体现了不同的搜索策略和效率特点。
摘要由CSDN通过智能技术生成

DFS

class Solution(object):
    def maxAreaOfIsland(self,grid):
        row, col = len(grid), len(grid[0])
        def backtrack(x, y):
            grid[x][y] = 0
            count = 1
            for nx, ny in [(x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)]:
                if (0 <= nx < row and 0 <= ny < col and grid[nx][ny]) == 1:
                    count += backtrack(nx,ny)
            return count
        max = 0
        for i in range(row):
            for j in range(col):
                if grid[i][j] == 1:
                    count = backtrack(i, j)
                    if count > max:
                        max = count
        return max

BFS

class Solution(object):
    def maxAreaOfIsland(self, grid):
        row, col = len(grid), len(grid[0])
        def bfs(x, y):
            count = 1
            grid[x][y] = 0
            que = [[x, y]]
            while que:
                [x, y] = que.pop(0)
                for nx,ny in [[x + 1, y], [x - 1, y], [x, y - 1], [x, y + 1]]:
                    if 0 <= nx < row and 0 <= ny < col and grid[nx][ny] == 1:
                        grid[nx][ny] = 0
                        count += 1
                        que.append([nx,ny])
            return count
        x,max = 0,0
        for i in range(row):
            for j in range(col):
                if grid[i][j] == 1:
                    x = bfs(i, j)
                if x > max:
                    max = x
        return max
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值