Networkx蜂窝结构中独立六边形识别方案咨询
蜂窝网络独立六边形提取方案
你构造的是规则六边形格点裁剪后的蜂窝结构,提取独立六边形可按如下步骤实现:
核心思路
规则蜂窝网格中的独立六边形对应长度恰好为6的无重复简单环。你之前尝试cycles方法未得到预期结果,大概率是没有做长度过滤、去重和闭合校验,导致返回了外层大环、重复环或非闭合序列,只需补上这几个处理步骤即可得到正确结果。
实现代码
在你现有代码基础上追加如下逻辑即可:
import networkx as nx def get_unique_hexagons(G): # 存储去重后的六边形 unique_hex = set() # 遍历所有长度为6的简单环 for cycle in nx.simple_cycles(G, length_bound=6): if len(cycle) != 6: continue # 对环节点排序后转元组存入集合,自动去重(消除不同起点/遍历方向的影响) sorted_cycle = tuple(sorted(cycle)) unique_hex.add(sorted_cycle) # 二次校验:确认是闭合的六边形环 valid_hexagons = [] for cycle in unique_hex: is_valid = True for i in range(6): u, v = cycle[i], cycle[(i+1)%6] if not G.has_edge(u, v): is_valid = False break if is_valid: valid_hexagons.append(cycle) return valid_hexagons # 调用示例(在你构建完G对象之后执行) hexagons = get_unique_hexagons(G) print(f"共找到{len(hexagons)}个独立六边形") # 可按需打印每个六边形的节点 for idx, cell in enumerate(hexagons): print(f"第{idx+1}个六边形的节点列表:{cell}")
效果验证
当你设置参数m=2时,运行上述代码会返回7个独立六边形,对应1个中心单元+外层6个单元,和结构的实际单元数完全匹配。
内容的提问来源于stack exchange,提问作者kikatuso
相关产品推荐
相关产品推荐

