问题标签 [petgraph]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
graph - 对petgraph中两个节点的可变访问
我正在使用petgraph板条箱来实现数据流图。我想将数据从边缘源节点复制到其目标节点。为此,我需要对目标节点的可变引用和对源节点的不可变引用。然而,Rust 的借用检查器阻止了这种情况的发生,因为可变和不可变的引用同时被带到图上。
petgraph 中是否有一个函数可以同时提供对多个节点的可变引用?
rust - petgraph 中的哪个算法会找到从 A 到 B 的最短路径?
我有一个方向图,想找到从节点 A 到节点 B 的最短路径。我在crates.io上搜索并找到了看起来像最受欢迎的 crate 的petgraph 。它实现了许多算法,但没有一个能解决我的任务。我错过了什么?
例如,Dijkstra 算法返回路径成本,但哪条路径的成本最小?Bellman-Ford 算法返回路径成本和节点,但没有路径。
这是我发现从图中打印路径的最简单方法:
据我所知,我需要自己根据
dijkstra
.
我相信,如果我dijkstra
自己实现(基于dijkstra.rspredecessor
的实现),并用和 return取消注释行predecessor
,最终的变体会更快,因为答案将类似于predecessor[predecessor[d]]
.
algorithm - 使用来自 petgraph 的 Bellman-Ford 算法
我想使用 petgraph crate 中的 Bellman-Ford 算法。这是一个非常简单的示例程序,它不能编译:
当我编译这个程序时,我得到这个错误信息:
graph - 返回哈希表中的所有 petgraph 连接组件
我正在使用 petgraph,我想提取连接的组件。
我希望将HashMap<u32, Vec<&petgraph::graph::NodeIndex>>
au32
作为连接组件的标识符,并将 aVec
作为容器,并引用连接组件中的所有节点。
如果这是一个糟糕的设计,请毫不犹豫地指出一个更好的设计;我是一个 Rust 初学者。
我试过这样的事情:
货物.toml:
随着编译器错误:
我在我的向量中克隆了节点索引并且有效:
我相信(也许是错误的)使用参考文献会比复制更有效。
rust - 从从 JSON 加载的 Vec<(String, String)> 创建 Petgraph 图
我正在尝试Graph
从 JSON 数据创建一个 petgraph。JSON 包含图的边,键表示起始顶点,值是相邻顶点的列表。可以生成带有边向量的图。
我设法创建了一个Vec<(String, String))>
但没有Vec<(&str, &str)>
按预期创建。
我尝试了不同的东西:
- 将图形类型更改为
DiGraphMap::<String, ()>
,但它不接受它。 - 将 a
Vec<(String, String)>
转换为 aVec<(&str, &str)>
。我读了这篇文章,但没有帮助。 edges.push((&"a", &"b"))
有效但无效edges.push((&from.clone(), &to.clone()))
。
在这里提取边缘可能有更好的方法。
rust - 如何使用conservative_impl_trait 返回对迭代器的引用?
我有一个petgraph::Graph
结构,我通过赋予每个节点权重 a 来强加一个树结构,parent_edge_idx
这是Option<EdgeIdx>
从其父节点连接到自身的边的一个。
我需要遍历一个节点的孩子。我需要连接边的边权重和子节点的权重。
我想将该迭代分解为一个辅助函数,该函数返回对Iterator<Item = (EdgeIdx, NodeIdx)>
. 我想免费做这个;因为我必须借用self.search_tree
才能做到这一点,所以迭代器仅在self
.
- 这是要编写的合理函数吗?
- 这个函数可以写吗?
任何门控功能都可以;我在夜间。
rust - 使用 petgraph 随机游走
我正在尝试使用petgraph
板条箱在有向图上实现随机游走。
到目前为止,我已经定义了一个RandomWalk
实现该Walker
特征的结构:
但是,我收到错误:
我真的不明白petgraph
API 是如何工作的,是GraphBase
不是正确的类型?
rust - 将petgraph点写入文件
我可能遗漏了一些非常基本的东西——我是 Rust 的新手。我正在尝试将petgraph::dot::Dot
表示写入文件。
以下小代码示例无法编译:
这是编译器错误输出:
petgraph 文档指出Dot 实现了 Display 特征,我的代码基于trait.Display 文档中的示例代码
我可以通过将格式字符串更改为来使代码工作,{:?}
但我认为这只是为了调试。有没有更好的方法来编写代码来完成同样的事情?
types - 生锈; 类型的命名空间中包含哪些类型?
我正在研究petgraph库的源代码,但我找不到该类型的Graph::NodeId
来源。
我可以看到该函数astar
接受一个类型G
(可以是 a Graph
)。astar
期望NodeId
在G
的命名空间中有一个类型。
我可以看到它Graph
被定义为
但是,我不知道该类型NodeId
来自何处。我在源代码中看到它定义的唯一地方是特征实现EdgeRef for EdgeReference
但我不明白该类型如何进入Graph
.
rust - How can I store a type directly in a struct when all the traits I need are implemented for references to that type?
Petgraph implements all its traits for references to it's internal graph type. How can I store and use a Graph
rather than an &Graph
in a struct?
This works but stores a reference to the graph:
But storing the Graph directly doesn't work