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

是否存在生成网格节点特定连接模式的通用算法?

解决网格节点相邻连接的通用算法

问题分析

你用itertools.combinations得到的是所有节点对的全连接,而网格的目标连接是**相邻节点(上下、左右)**的连接,所以需要过滤掉不相邻的节点对。

实现思路

假设节点列表是行优先排列的(比如3x3网格的节点顺序是:第1行0,1,2;第2行3,4,5;第3行6,7,8),我们可以通过节点索引判断是否相邻:

  • 左右相邻:两个节点索引差为1,且处于同一行(即(i+1) % cols != 0,其中cols是网格列数)
  • 上下相邻:两个节点索引差为cols(即j = i + cols,且j < 总节点数)

你可以直接基于这个逻辑过滤combinations的结果,或者直接生成符合条件的连接对。

代码实现

方法1:过滤itertools.combinations的结果

from itertools import combinations

def generate_grid_connections(points, cols):
    total_nodes = len(points)
    connections = []
    for pair in combinations(range(total_nodes), 2):
        i, j = sorted(pair)
        # 判断左右相邻
        if j == i + 1 and (i + 1) % cols != 0:
            connections.append(pair)
        # 判断上下相邻
        elif j == i + cols:
            connections.append(pair)
    return connections

# 示例:3x3网格
points_3x3 = list(range(9))
cols_3x3 = 3
connections_3x3 = generate_grid_connections(points_3x3, cols_3x3)
print("3x3网格连接:", connections_3x3)

# 示例:4x3网格
points_4x3 = list(range(12))
cols_4x3 = 4
connections_4x3 = generate_grid_connections(points_4x3, cols_4x3)
print("4x3网格连接:", connections_4x3)

方法2:直接生成连接(更高效)

不需要用combinations,直接循环生成相邻对,避免无意义的全量节点对生成,性能更优:

def generate_grid_connections(points, cols):
    total_nodes = len(points)
    connections = []
    for i in range(total_nodes):
        # 连接右边节点(如果不是行尾)
        if (i + 1) % cols != 0:
            connections.append((i, i+1))
        # 连接下方节点(如果不是最后一行)
        if i + cols < total_nodes:
            connections.append((i, i+cols))
    return connections

# 调用示例同方法1

说明

  • 你需要传入网格的列数cols(比如3x3网格cols=3,4x3网格cols=4),因为仅通过节点列表无法自动推断行列结构(比如6个节点可能是2x3或3x2)。
  • 两种方法都能生成符合要求的网格连接模式,方法2更适合大网格场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:05:16