问题标签 [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 - 如何使用 Serde 和 Petgraph 序列化和反序列化图表?
Petgraph 文档暗示了 Serde 支持。在“当前功能”下:
serde-1 - 默认关闭。使用 serde 1.0 启用 Graph、StableGraph 的序列化。可能需要更新版本的 Rust 而不是单独的 petgraph。
我可以serde_utils.rs
在源代码中看到该文件,但我没有找到显示如何使 Serde 支持工作的示例。
我知道如何启用可选的 crate 功能。我的问题旨在让序列化和反序列化工作。
graph - 如何使用 rust 和 petgraph 解决旅行商问题?
我有一个从原始输入到petgraph::UnGraph
结构的解析器。我需要找到访问所有节点的最短路径。我找到algo::dijkstra
了,但据我了解,Dijkstra 只会给我连接两个特定节点的最短路径。
petgraph 库中是否有一个函数可以轻松解决旅行商问题,还是我需要自己实现一个求解器?我浏览了文档,但找不到任何东西,但也许这只是我对图形算法的有限经验。
rust - Rust Petgraph WASM 项目,尝试使用具有 Graph 属性的结构,但需要 2 个参数
我对 Rust 很陌生,所以这可能是一个非常菜鸟的问题。
我正在尝试使用 rust -> wasm 创建一个 Web 应用程序。尝试按照教程https://rustwasm.github.io/docs/book/introduction.html并尝试使用 crate 包“petgraph”我想出了以下内容
但这给了我编译错误
阅读https://docs.rs/petgraph/0.5.0/petgraph/graph/struct.Graph.html 然后我尝试了
但是后来它说 wasm-bindgen 不支持该语法?我应该在这里做什么?
rust - 如何使 OwningRef 与迭代器一起工作?
我有一个RwLock
受保护的 global WORLD
,我想编写一个函数来读取它并返回一个迭代器(类型为),该迭代器在存储在全局内部的Neighbors
a 中的边上进行迭代。petgraph::stable_graph::StableGraph
我OwningRef
用来处理函数退出后保持读锁守卫活动的问题,这在过去直接返回字段时对我有用World
。我已经包含了一个可编译的示例和我在下面遇到的错误 - 似乎存在某种类型问题,但我无法弄清楚。我认为这可能与OwningRef
想要处理引用而不是包含引用 ( Neighbors
) 的对象有关,但我不确定如何解决这个问题。
货物.toml:
main.rs:
错误:
rust - 在 Rust 的 petgraph 中,我如何测试节点是否是循环的一部分?
我正在使用 Rust 的petgraph库,并且想知道如何检查节点是否是循环的一部分。该petgraph::algo::is_cyclic_directed
函数会告诉我图中是否有任何循环,但是在查看所有文档后,我找不到任何可以告诉我节点是否是循环的一部分的函数。我原以为这将是一个足够常见的任务,需要一个辅助函数。
现在我可以自己遍历图表,但我能想出的代码既不是最简洁的,也不会是高效的。
这里最好的选择是什么?
rust - 你如何使用 Rust 的 petgraph 执行过滤搜索?
Rust 的 Petgraph 库有一堆过滤器“适配器”,但我找不到任何示例或教程来说明如何使用它们。一些(但不是全部)具有构造函数,例如EdgeFiltered.from_fn(),它采用图形和函数,但不清楚如何将它与Dfs或astar等搜索方法一起使用,因为它们没有过滤器参数。
那么如何使用这些过滤器呢?例如,如果我有一个具有整数边权重的图,您将如何:
- 执行深度优先搜索,但排除具有负权重的边缘,
- 执行 astar 搜索,排除具有负权重的边?
rust - 如何使用它们连接的节点迭代 Petgraph 节点的边缘?
edges
Petgraph Graph的函数返回边的迭代器。然后每次迭代都会返回一个EdgeReference
,它可以方便地存储两个节点和边缘权重,如果您调试打印一个,您可以看到它。但不幸的是,这些EdgeReference
成员都是私有的,因此您无法在代码中访问它们。
那么如何迭代连接到节点的边和节点呢?这看起来应该很简单,但我无法找到任何示例代码。
rust - 如何修改过滤的 Petgraph 图的边权重?
我正在为我的图使用边缘过滤器并想要更新边缘权重:
但是这个错误因为EdgeFiltered
没有update_edge
功能:
如果我转而参考原始数据graph
,则会出现借用检查器错误(与 不同Dfs
,不幸EdgeFiltered
的是,它并非旨在让您访问原始图形):
Edgefiltered
非常小,并且似乎没有任何用于可变图形操作的东西。有什么办法可以用 Petgraph 附带的东西来做到这一点,还是我必须编写自己的update_edge
showhow 版本?
rust - 如何在 Petgraph 中获得确定性拓扑排序?
我正在使用 Petgraph 的toposort
函数来获取图形节点的排序列表。toposort
但是,不保证同一级别的所有节点都将以一致的确定顺序返回。Petgraph 中是否有其他选项可以按确定的顺序返回节点,还是我需要编写自己的函数?(如果是这样,任何指针?)
rust - 如何修改 Petgraph 边缘的源或目标?
Petgraph 可以很容易地更改边权重,可以通过直接访问图 ( graph[edge_id]
) 或通过update_edge
。
但有时您想更改边连接的节点。有没有办法就地编辑边缘的源或目标?我还没有找到一个,所以我只是删除并重新创建边缘,但有时有点令人费解。