问题标签 [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 回答
219 浏览

graph - 对petgraph中两个节点的可变访问

我正在使用petgraph板条箱来实现数据流图。我想将数据从边缘源节点复制到其目标节点。为此,我需要对目标节点的可变引用和对源节点的不可变引用。然而,Rust 的借用检查器阻止了这种情况的发生,因为可变和不可变的引用同时被带到图上。

petgraph 中是否有一个函数可以同时提供对多个节点的可变引用?

0 投票
1 回答
1471 浏览

rust - petgraph 中的哪个算法会找到从 A 到 B 的最短路径?

我有一个方向图,想找到从节点 A 到节点 B 的最短路径。我在crates.io上搜索并找到了看起来像最受欢迎的 crate 的petgraph 。实现了许多算法,但没有一个能解决我的任务。我错过了什么?

例如,Dijkstra 算法返回路径成本,但哪条路径的成本最小?Bellman-Ford 算法返回路径成本和节点,但没有路径。

这是我发现从图中打印路径的最简单方法:

据我所知,我需要自己根据 dijkstra.

我相信,如果我dijkstra自己实现(基于dijkstra.rspredecessor的实现),并用和 return取消注释行predecessor,最终的变体会更快,因为答案将类似于predecessor[predecessor[d]].

0 投票
1 回答
367 浏览

algorithm - 使用来自 petgraph 的 Bellman-Ford 算法

我想使用 petgraph crate 中的 Bellman-Ford 算法。这是一个非常简单的示例程序,它不能编译:

当我编译这个程序时,我得到这个错误信息:

0 投票
1 回答
437 浏览

graph - 返回哈希表中的所有 petgraph 连接组件

我正在使用 petgraph,我想提取连接的组件。

我希望将HashMap<u32, Vec<&petgraph::graph::NodeIndex>> au32作为连接组件的标识符,并将 aVec作为容器,并引用连接组件中的所有节点。

如果这是一个糟糕的设计,请毫不犹豫地指出一个更好的设计;我是一个 Rust 初学者。

我试过这样的事情:

货物.toml:

随着编译器错误:

我在我的向量中克隆了节点索引并且有效:

我相信(也许是错误的)使用参考文献会比复制更有效。

0 投票
1 回答
710 浏览

rust - 从从 JSON 加载的 Vec<(String, String)> 创建 Petgraph 图

我正在尝试Graph从 JSON 数据创建一个 petgraph。JSON 包含图的边,键表示起始顶点,值是相邻顶点的列表。可以生成带有边向量的图

我设法创建了一个Vec<(String, String))>但没有Vec<(&str, &str)>按预期创建。

我尝试了不同的东西:

  • 将图形类型更改为DiGraphMap::<String, ()>,但它不接受它。
  • 将 aVec<(String, String)>转换为 a Vec<(&str, &str)>。我读了这篇文章,但没有帮助。
  • edges.push((&"a", &"b"))有效但无效edges.push((&from.clone(), &to.clone()))

在这里提取边缘可能有更好的方法。

0 投票
1 回答
283 浏览

rust - 如何使用conservative_impl_trait 返回对迭代器的引用?

我有一个petgraph::Graph结构,我通过赋予每个节点权重 a 来强加一个树结构,parent_edge_idx这是Option<EdgeIdx>从其父节点连接到自身的边的一个。

我需要遍历一个节点的孩子。我需要连接边的边权重子节点的权重。

我想将该迭代分解为一个辅助函数,该函数返回对Iterator<Item = (EdgeIdx, NodeIdx)>. 我想免费做这个;因为我必须借用self.search_tree才能做到这一点,所以迭代器仅在self.

  1. 这是要编写的合理函数吗?
  2. 这个函数可以写吗?

任何门控功能都可以;我在夜间。

0 投票
1 回答
301 浏览

rust - 使用 petgraph 随机游走

我正在尝试使用petgraph板条箱在有向图上实现随机游走。

到目前为止,我已经定义了一个RandomWalk实现该Walker特征的结构:

但是,我收到错误:

我真的不明白petgraphAPI 是如何工作的,是GraphBase不是正确的类型?

0 投票
1 回答
468 浏览

rust - 将petgraph点写入文件

我可能遗漏了一些非常基本的东西——我是 Rust 的新手。我正在尝试将petgraph::dot::Dot表示写入文件。

以下小代码示例无法编译:

这是编译器错误输出:

petgraph 文档指出Dot 实现了 Display 特征,我的代码基于trait.Display 文档中的示例代码

我可以通过将格式字符串更改为来使代码工作,{:?}但我认为这只是为了调试。有没有更好的方法来编写代码来完成同样的事情?

0 投票
1 回答
90 浏览

types - 生锈; 类型的命名空间中包含哪些类型?

我正在研究petgraph库的源代码,但我找不到该类型的Graph::NodeId来源。

我可以看到该函数astar接受一个类型G(可以是 a Graph)。astar期望NodeIdG的命名空间中有一个类型。

我可以看到它Graph被定义为

但是,我不知道该类型NodeId来自何处。我在源代码中看到它定义的唯一地方是特征实现EdgeRef for EdgeReference

但我不明白该类型如何进入Graph.

0 投票
1 回答
122 浏览

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:

Link to rust playground

But storing the Graph directly doesn't work

Link to rust playgound