如何通过循环移除节点并恢复图,存储连通性判断结果?
修正后的循环实现代码
你原代码的核心问题:
nx.Graph.remove_node()方法无返回值,你赋值的c实际是None,后续调用nx.is_connected(c)和c.add_node()会直接报错- 错误操作不存在的图对象
c,应该直接操作testg2本身 - 未正确初始化存储结果的列表,错误尝试访问
stor[i](stor是布尔值而非列表)
以下是修正后的完整代码:
import networkx as nx # 初始化原始完全图 testg = nx.Graph() testg.add_nodes_from([1,2,3,4]) testg.add_edges_from([(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]) # 复制原始图用于操作 testg2 = nx.Graph() testg2.add_nodes_from([1,2,3,4]) testg2.add_edges_from([(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]) # 初始化存储结果的列表 connectivity_results = [] nodez = list(range(1,5)) for i in nodez: # 移除节点 testg2.remove_node(i) # 判断连通性并存入列表 is_conn = nx.is_connected(testg2) connectivity_results.append(is_conn) # 恢复节点和对应的边 testg2.add_node(i) testg2.add_edges_from(testg.edges(i)) # 输出节点与对应连通性的映射 result_dict = dict(zip(nodez, connectivity_results)) print(result_dict)
关键说明:
- 直接操作目标图:所有移除、恢复操作都在
testg2上执行,无需额外赋值无效对象 - 正确存储结果:初始化
connectivity_results列表,每次将判断得到的布尔值追加进去 - 精准恢复图状态:借助原始图
testg获取被移除节点的全部关联边,确保每次循环后testg2回到初始状态
运行代码后,会输出每个节点移除后的连通性结果,针对你的完全图测试用例,所有结果都会是True,符合预期。
内容的提问来源于stack exchange,提问作者jlewis
相关产品推荐
相关产品推荐

