You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定坐标隔离2D布尔数组中的特定岛屿?

提取指定坐标所在岛屿的实现方案

问题理解

咱们的需求是:给一个由1(陆地)和0(水域)组成的二维数组,找到指定坐标那块陆地所属的整个岛屿(岛屿是指仅通过上下左右四个方向连通的陆地,对角线不算),然后生成一个新数组——只有这个岛屿保留1,其他区域全部设为0。

举个题目里的例子:

输入的一维序列转成5行6列的二维数组是:

1 0 0 1 1 0
0 1 0 0 0 1
1 1 1 0 0 0
0 1 0 1 1 1
1 1 1 0 0 0

指定坐标是[1][2](也就是第二行第三列,索引从0开始计算),最终输出的一维序列就是题目里给出的那串仅保留目标岛屿1的结果。

解决思路

最直观的办法就是用深度优先搜索(DFS) 或者广度优先搜索(BFS) 把目标坐标连通的所有陆地都标记出来:

  1. 先确认目标坐标是不是陆地,如果是水域,直接返回全0数组就行。
  2. 创建一个和原数组尺寸一致的新数组,初始时全部填充为0。
  3. 从目标坐标出发,往上下左右四个方向遍历连通的陆地:
    • 每找到一块陆地,就把新数组对应位置改成1。
    • 为了避免重复遍历同一块陆地,可以把原数组中已访问的陆地改成0(或者单独用一个访问标记矩阵也可以)。

Python代码实现

我用DFS写了个示例,逻辑非常清晰:

def extract_target_island(grid, target_row, target_col):
    rows = len(grid)
    if rows == 0:
        return []
    cols = len(grid[0])
    # 初始化结果数组,全部填充为0
    result = [[0]*cols for _ in range(rows)]
    
    # 先判断目标位置是否为陆地,不是的话直接返回全0数组
    if grid[target_row][target_col] != 1:
        return result
    
    # 定义上下左右四个方向的偏移量
    directions = [(-1,0), (1,0), (0,-1), (0,1)]
    
    def dfs(row, col):
        # 越界或者当前位置不是陆地,直接退出递归
        if row < 0 or row >= rows or col <0 or col >= cols or grid[row][col] !=1:
            return
        # 将原数组的当前陆地设为0,避免重复访问
        grid[row][col] = 0
        # 结果数组中标记当前位置为陆地
        result[row][col] = 1
        # 遍历四个方向的相邻位置
        for dr, dc in directions:
            dfs(row+dr, col+dc)
    
    # 从目标坐标开始遍历整个岛屿
    dfs(target_row, target_col)
    # 将二维结果数组转换为一维序列,匹配题目要求的输出格式
    return [num for row in result for num in row]

# 测试题目中的示例
original_grid = [
    [1,0,0,1,1,0],
    [0,1,0,0,0,1],
    [1,1,1,0,0,0],
    [0,1,0,1,1,1],
    [1,1,1,0,0,0]
]
# 目标坐标为行索引1,列索引2(对应第二行第三列)
output_sequence = extract_target_island(original_grid, 1, 2)
print("输出序列:", ' '.join(map(str, output_sequence)))

代码解释

  • 先做了边界校验,如果目标位置不是陆地,直接返回全0数组,避免无效计算。
  • DFS函数负责递归遍历所有连通的陆地,每遍历一块就修改原数组标记为已访问,同时在结果数组中标记为陆地。
  • 最后把二维的结果数组转换为一维序列,和题目给出的输出格式完全匹配。

运行这段代码,输出的序列就和题目里的示例完全一致啦。

内容的提问来源于stack exchange,提问作者Mike Jagger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:15:53