如何从LightGraphs.jl的Edge中自动提取顶点编号?
在LightGraphs.jl中从Edge提取顶点的正确方法
嘿,我刚好熟悉LightGraphs.jl的用法,你遇到的这个问题其实是因为Edge类型的访问逻辑和你习惯的方式不一样——它不是通过下标或者直接访问属性来获取顶点的,而是要用库提供的专用函数~
单个Edge的顶点提取
对于你代码里的edge1这个Edge对象,正确获取起点和终点的方式是使用src()和dst()函数:
g = cycle_graph(4) path = a_star(g, 1, 3) edge1 = path[1] # 获取Edge的起点(对应你示例里的1) start_node = src(edge1) # 获取Edge的终点(对应你示例里的2) end_node = dst(edge1)
为什么之前的方法无效?
edge1[1]不行:LightGraphs的Edge类型没有实现下标访问接口,所以不能用数组下标来取顶点edge1.From不行:这个类型根本没有名为From的字段,这可能是你从其他编程语言的图库带来的习惯,LightGraphs的设计里是用src()(source的缩写)和dst()(destination的缩写)来处理的
快速提取完整路径的所有顶点
如果你最终目的是收集路径上所有节点的信息,其实不用逐个处理Edge,可以直接把整个路径的顶点序列提取出来:
# 先收集所有Edge的起点 path_nodes = [src(e) for e in path] # 再加上最后一个Edge的终点,得到完整路径 push!(path_nodes, dst(last(path))) # 此时path_nodes就是[1, 2, 3],正好是从1到3的完整节点路径
这样你就能直接拿到所有需要的节点,方便后续处理它们的相关信息啦~
内容的提问来源于stack exchange,提问作者fermion4
相关产品推荐
相关产品推荐

