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

N×N网格中5个连续空格序列的查找技术需求

搞定N×N网格中5个连续空格序列的问题

嘿,我来帮你解决这个找网格里连续空格的需求!不管是水平、垂直还是对角线方向的5个连续空格,咱们都能精准找出来,下面是具体的思路和实现方案:

核心思路拆解

要找5个连续的空格,关键要覆盖四个方向:水平向右、垂直向下、右下对角线、右上对角线(为啥只查这四个?因为反过来的方向比如向左、向上,其实会和其他起点的检查重复,这样能避免重复找同一个序列)。每个位置都要往这四个方向挨个检查,只要能凑齐连续5个空格,就把这个序列记录下来。

具体操作步骤

  • 先摸清楚网格的边界:从字典的所有坐标键里,找出最大和最小的x、y值,这样就知道哪些位置是有效的,不会越界。
  • 定义四个方向的偏移量:用[(0,1), (1,0), (1,1), (1,-1)]分别代表右、下、右下、右上这四个方向。
  • 遍历网格里的每一个位置:
    • 如果当前位置是空格" ",就逐个方向检查后续4个位置(加上当前正好5个)。
    • 每一步都要确认后续位置在网格里,而且也是空格,要是中间有一个不符合,就直接跳过这个方向。
    • 要是凑齐了5个连续空格,就把这个序列存起来,还要注意去重,避免同一个序列被多次记录。

可直接运行的Python代码示例

def find_five_consecutive_spaces(grid):
    # 先处理空网格的情况
    coords = list(grid.keys())
    if not coords:
        return []
    
    # 确定网格的有效坐标范围
    max_x = max(x for x, y in coords)
    min_x = min(x for x, y in coords)
    max_y = max(y for x, y in coords)
    min_y = min(y for x, y in coords)
    
    # 四个要检查的方向:右、下、右下、右上
    directions = [(0, 1), (1, 0), (1, 1), (1, -1)]
    sequences = []
    # 用集合来存已找到的序列,避免重复
    seen = set()
    
    for (x, y) in coords:
        # 当前位置不是空格就跳过
        if grid[(x, y)] != " ":
            continue
        
        for dx, dy in directions:
            current_seq = [(x, y)]
            valid = True
            # 检查后续4个位置
            for i in range(1, 5):
                nx = x + dx * i
                ny = y + dy * i
                # 检查坐标是否在网格里,且对应值是空格
                if (nx, ny) not in grid or grid[(nx, ny)] != " ":
                    valid = False
                    break
                current_seq.append((nx, ny))
            
            if valid:
                # 把序列排序后转成元组,方便去重
                sorted_seq = tuple(sorted(current_seq))
                if sorted_seq not in seen:
                    seen.add(sorted_seq)
                    sequences.append(current_seq)
    
    return sequences

# 举个例子测试一下
sample_grid = {
    (0,0): "Yes", (0,1): " ", (0,2): " ", (0,3): " ", (0,4): " ", (0,5): " ",
    (1,0): " ", (1,1): " ", (1,2): "No", (1,3): " ", (1,4): " ", (1,5): " ",
    (2,0): " ", (2,1): " ", (2,2): " ", (2,3): " ", (2,4): " ", (2,5): "Yes",
    (3,0): " ", (3,1): "No", (3,2): " ", (3,3): " ", (3,4): " ", (3,5): " ",
    (4,0): " ", (4,1): " ", (4,2): " ", (4,3): " ", (4,4): " ", (4,5): " ",
    (5,0): "No", (5,1): " ", (5,2): " ", (5,3): " ", (5,4): " ", (5,5): " "
}

# 运行函数并打印结果
found_sequences = find_five_consecutive_spaces(sample_grid)
for idx, seq in enumerate(found_sequences, 1):
    print(f"找到第{idx}个连续空格序列:{seq}")

几个要注意的细节

  • 边界检查:一定要确认后续的坐标存在于网格字典中,不然会报错,代码里用(nx, ny) not in grid来判断就很稳妥。
  • 去重处理:同一个连续序列可能从不同的起点被查到(比如水平序列的第一个和第二个位置),所以我们把序列排序后存入集合,确保每个序列只记录一次。
  • 坐标兼容性:不管你的网格坐标是从0开始还是从1开始(比如示例里的(1,2)),代码都能自动适配,因为它是从给定的坐标里提取边界的。
  • 空格匹配:要严格匹配" "(空格字符),别和空字符串""搞混了,不然会漏找或者误判。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:52:11