问题标签 [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.

0 投票
1 回答
363 浏览

graph - 如何使用 Serde 和 Petgraph 序列化和反序列化图表?

Petgraph 文档暗示了 Serde 支持。在“当前功能”下:

serde-1 - 默认关闭。使用 serde 1.0 启用 Graph、StableGraph 的序列化。可能需要更新版本的 Rust 而不是单独的 petgraph。

我可以serde_utils.rs在源代码中看到该文件,但我没有找到显示如何使 Serde 支持工作的示例。

我知道如何启用可选的 crate 功能。我的问题旨在让序列化和反序列化工作。

0 投票
1 回答
347 浏览

graph - 如何使用 rust 和 petgraph 解决旅行商问题?

我有一个从原始输入到petgraph::UnGraph结构的解析器。我需要找到访问所有节点的最短路径。我找到algo::dijkstra了,但据我了解,Dijkstra 只会给我连接两个特定节点的最短路径。

petgraph 库中是否有一个函数可以轻松解决旅行商问题,还是我需要自己实现一个求解器?我浏览了文档,但找不到任何东西,但也许这只是我对图形算法的有限经验。

0 投票
1 回答
276 浏览

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 不支持该语法?我应该在这里做什么?

0 投票
0 回答
91 浏览

rust - 如何使 OwningRef 与迭代器一起工作?

我有一个RwLock受保护的 global WORLD,我想编写一个函数来读取它并返回一个迭代器(类型为),该迭代器在存储在全局内部的Neighborsa 中的边上进行迭代。petgraph::stable_graph::StableGraphOwningRef用来处理函数退出后保持读锁守卫活动的问题,这在过去直接返回字段时对我有用World。我已经包含了一个可编译的示例和我在下面遇到的错误 - 似乎存在某种类型问题,但我无法弄清楚。我认为这可能与OwningRef想要处理引用而不是包含引用 ( Neighbors) 的对象有关,但我不确定如何解决这个问题。

货物.toml:

main.rs:

错误:

0 投票
1 回答
225 浏览

rust - 在 Rust 的 petgraph 中,我如何测试节点是否是循环的一部分?

我正在使用 Rust 的petgraph库,并且想知道如何检查节点是否是循环的一部分。该petgraph::algo::is_cyclic_directed函数会告诉我图中是否有任何循环,但是在查看所有文档后,我找不到任何可以告诉我节点是否是循环的一部分的函数。我原以为这将是一个足够常见的任务,需要一个辅助函数。

现在我可以自己遍历图表,但我能想出的代码既不是最简洁的,也不会是高效的。

这里最好的选择是什么?

0 投票
1 回答
119 浏览

rust - 你如何使用 Rust 的 petgraph 执行过滤搜索?

Rust 的 Petgraph 库有一堆过滤器“适配器”,但我找不到任何示例或教程来说明如何使用它们。一些(但不是全部)具有构造函数,例如EdgeFiltered.from_fn(),它采用图形和函数,但不清楚如何将它与Dfsastar等搜索方法一起使用,因为它们没有过滤器参数。

那么如何使用这些过滤器呢?例如,如果我有一个具有整数边权重的图,您将如何:

  1. 执行深度优先搜索,但排除具有负权重的边缘,
  2. 执行 astar 搜索,排除具有负权重的边?
0 投票
1 回答
457 浏览

rust - 如何使用它们连接的节点迭代 Petgraph 节点的边缘?

edgesPetgraph Graph的函数返回边的迭代器。然后每次迭代都会返回一个EdgeReference,它可以方便地存储两个节点和边缘权重,如果您调试打印一个,您可以看到它。但不幸的是,这些EdgeReference成员都是私有的,因此您无法在代码中访问它们。

那么如何迭代连接到节点的边和节点呢?这看起来应该很简单,但我无法找到任何示例代码。

0 投票
1 回答
181 浏览

rust - 如何修改过滤的 Petgraph 图的边权重?

我正在为我的图使用边缘过滤器并想要更新边缘权重:

但是这个错误因为EdgeFiltered没有update_edge功能:

如果我转而参考原始数据graph,则会出现借用检查器错误(与 不同Dfs,不幸EdgeFiltered的是,它并非旨在让您访问原始图形):

以上游乐场链接

Edgefiltered非常小,并且似乎没有任何用于可变图形操作的东西。有什么办法可以用 Petgraph 附带的东西来做到这一点,还是我必须编写自己的update_edgeshowhow 版本?

0 投票
1 回答
150 浏览

rust - 如何在 Petgraph 中获得确定性拓扑排序?

我正在使用 Petgraph 的toposort函数来获取图形节点的排序列表。toposort但是,不保证同一级别的所有节点都将以一致的确定顺序返回。Petgraph 中是否有其他选项可以按确定的顺序返回节点,还是我需要编写自己的函数?(如果是这样,任何指针?)

0 投票
0 回答
41 浏览

rust - 如何修改 Petgraph 边缘的源或目标?

Petgraph 可以很容易地更改边权重,可以通过直接访问图 ( graph[edge_id]) 或通过update_edge

但有时您想更改边连接的节点。有没有办法就地编辑边缘的源或目标?我还没有找到一个,所以我只是删除并重新创建边缘,但有时有点令人费解。