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
相关产品推荐
相关产品推荐

