python - 使用节点{链表方式}难以理解具有邻接表表示的图
问题描述
class AdjNode:
def __init__(self, data):
self.vertex = data
self.next = None
Size of the array will be the no. of the
# vertices "V"
class Graph:
def __init__(self, vertices):
self.V = vertices
self.graph = [None] * self.V
# Function to add an edge in an undirected graph
def add_edge(self, src, dest):
# Adding the node to the source node
node = AdjNode(dest)
#from here
node.next = self.graph[src]
self.graph[src] = node
#to here
node = AdjNode(src)
node.next = self.graph[dest]
self.graph[dest] = node
if __name__ == "__main__":
V = 5
graph = Graph(V)
graph.add_edge(0, 1)
graph.add_edge(0, 4)
graph.add_edge(1, 2)
graph.add_edge(1, 3)
graph.add_edge(1, 4)
graph.print_graph()
我不明白评论中从这里到这里的部分。请解释。我什至尝试过 python 导师可视化工具。不过其他的都明白了。此代码来自 geeksforgeeks 页面https://www.geeksforgeeks.org/graph-and-its-representations/ 任何帮助将不胜感激。
解决方案
解释
有问题的代码行是在链表开头插入项目的标准方式。
脚步
- 创建一个新节点
node = AdjNode(dest)
将新节点放在列表的头部
通过将其更新到现有列表头的旁边来完成
node.next = self.graph[src]
- 将头部分配给新节点
self.graph[src] = node
推荐阅读
- ios - 从文件应用程序拖放失败,出现 257 文件保护错误
- javascript - 当 Electron 应用程序停靠在屏幕右侧时,如何向左调整窗口大小?
- ag-grid - ag-grid 的“内置”过滤器选项是什么?
- sql-server - 从行中选择最大列
- mysql - 创建一个预订系统,但我很难将输入日期插入 MySQL 表
- javascript - 需要帮助定义消息参数,不确定有什么问题?
- java-native-interface - JNI 中对同一个对象的多个引用会发生什么?
- amazon-web-services - 在 juju 应用程序中设置根磁盘约束以在 AWS 上使用 ssd 而不是磁
- javascript - 无法使用量角器在 Firefox 浏览器(版本 65)中使用 SendKeys 将日期发送到日期字段
- android - 如何在不影响图像透明区域的情况下为可绘制对象着色?