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

Python图数据结构Graph类add_edge方法指定代码的理解咨询

理解Graph类add_edge方法中那行代码的工作原理

别担心,咱们一步步拆解开这行代码self.graph_dict[from_vertex.value].add_edge(to_vertex.value, weight),就能搞懂它到底在做什么了:

1. 先拆解self.graph_dict[from_vertex.value]

你的Graph类里,graph_dict是一个核心字典:它的键是顶点的value值,对应的值是这个顶点的Vertex实例对象。当你调用add_vertex方法把一个Vertex加入图时,本质就是把vertex.value作为键、vertex本身作为值,存到graph_dict里的。

所以self.graph_dict[from_vertex.value]的作用很明确:根据传入的from_vertex(一个Vertex对象)的value,从图的字典里取出这个起点顶点对应的Vertex实例。

2. 再看.add_edge(to_vertex.value, weight)

拿到起点的Vertex实例后,就调用了Vertex类自己的add_edge方法。回忆你写的Vertex类逻辑:它的add_edge方法会把传入的第一个参数(这里是to_vertex.value,也就是终点顶点的value)作为键,weight作为值,添加到该顶点的edges字典里——这个字典就是用来记录“当前顶点和哪些其他顶点相连、边的权重是多少”的。

举个实际例子更直观

假设你做了以下操作:

# 创建两个顶点实例
v1 = Vertex("A")
v2 = Vertex("B")

# 创建一个无向图
my_graph = Graph()
my_graph.add_vertex(v1)
my_graph.add_vertex(v2)

# 给两个顶点加一条权重为5的边
my_graph.add_edge(v1, v2, 5)

当执行my_graph.add_edge(v1, v2, 5)时:

  • self.graph_dict[from_vertex.value]就是self.graph_dict["A"],取出的是v1这个Vertex实例;
  • 接着调用v1.add_edge("B", 5),把v1的edges字典更新为{"B": 5};
  • 因为是无向图,代码还会执行反向操作:self.graph_dict["B"].add_edge("A", 5),把v2的edges字典更新为{"A": 5}。

这样两个顶点就互相记录了彼此的连接关系,完全符合无向图的特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:27:44