python3深度优先算法之寻找最大油田

政府现勘探到一片油田,在这一片油田中有很多散落的石油资源。因为经费原因,政府只能开采一处油田,所以需找到最大的油田进行施工。油田的地理情况被简化成了一个矩阵,其中每一个方格代表一块土地,0 代表陆地,1 代表石油资源。如果一处石油资源和另一处石油相连接,则其算一块油田。现要找到最大的相互连接的石油资源,并输出它的面积。

图 1 所示就是一个例子,其中灰色的区域都是不同大小的油田。
在这里插入图片描述

"""
寻找最大油田
政府现勘探到一片油田,在这一片油田中有很多散落的石油资源。因为经费原因,政府只能开采一处油田,所以需找到最大的油田进行施工。油田的地理情况被简化成了一个矩阵,其中每一个方格代表一块土地,0 代表陆地,1 代表石油资源。如果一处石油资源和另一
处石油相连接,则其算一块油田。现要找到最大的相互连接的石油资源,并输出它的面积。
"""


def max_area_of_island(grid):
    row = len(grid) # 数组的行数,也就是y轴的长度
    col = len(grid[0])  # 数组的列数,也就是x轴的长度
    # 定义油田是否被访问过
    arrived = [[False for i in range(row)] for j in range(col)]

    # 记录油田的最大面积
    ans = 0

    # 写一个深度优先遍历方法去遍历油田
    def DFS(x, y):
        # 判断现在搜索的土地是否出界,是否已经访问过,是否存在油田
        if 0 <= x < col and 0 <= y < row and not arrived[x][y] and grid[x][y] == 1:
            arrived[x][y] = True # 标记该土地已经被搜索过
            # 搜索相邻的土地并将答案加1
            return 1 + DFS(x - 1, y) + DFS(x + 1, y) + DFS(x, y - 1) + DFS(x, y + 1)

        else:
            return 0
# 调用深度遍历函数
    for i in range(row):
        for j in range(col):
            area = DFS(i, j)
            if area > ans:
                ans = area
    return ans

if __name__ == '__main__':
    grid = [[0, 0, 0, 0, 1, 1, 0], [0, 1, 1, 0, 1, 1, 0], [0, 1, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 1, 1],
            [0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0, 1]]
    print(max_area_of_island(grid))
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值