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

如何用NetworkX创建2n节点环形图,排除对侧及k个邻接节点(k为n的函数)

解决方案:动态排除节点构建单位圆图

核心是把手动枚举的排除条件改成基于n的函数k的动态判断,避免重复代码,同时实现需求:每个节点排除对侧节点及对侧节点两侧各k个节点(k由n决定)。

修改后的代码

import networkx as nx
import numpy as np
import matplotlib.pyplot as plt

def create_circle_graph(n):
    G = nx.Graph()
    total_nodes = 2 * n
    theta = np.linspace(0, 2*np.pi, total_nodes, endpoint=False)
    
    # 定义k为n的函数,示例用k = n//3,可按需修改
    k = n // 3
    
    for i in range(total_nodes):
        G.add_node(i, pos=np.array([np.cos(theta[i]), np.sin(theta[i])]))
        opposite_node = (i + n) % total_nodes
        
        for j in range(i+1, total_nodes):
            # 计算j相对对侧节点的环形偏移量
            offset = (j - opposite_node) % total_nodes
            # 判断j是否属于需排除的节点范围
            if not (0 <= offset <= k or (total_nodes - k) <= offset <= total_nodes - 1):
                G.add_edge(i, j)
    return G

n = 10
G = create_circle_graph(n)
pos = nx.get_node_attributes(G, 'pos')
nx.draw(G, pos, with_labels=True)
plt.show()

关键说明

  • k的自定义:你可以根据需求调整k与n的映射关系,比如k = n//2、k = int(np.sqrt(n))等,只要是n的合法函数即可。
  • 环形范围判断:通过模运算处理节点的环形结构,用偏移量范围替代手动枚举,代码更简洁且易于维护。如果j的偏移量落在对侧节点的左右k个区间内(含对侧节点本身),则跳过该边;否则添加边。
  • 效率优化:通过j从i+1开始循环,确保每条边只被添加一次,避免重复操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:55:34