标签: petgraph

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

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

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

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

extern crate petgraph;
use petgraph::prelude::*;
use petgraph::algo::dijkstra;

fn main() {
    let mut graph = Graph::<&str, i32>::new();
    let a = graph.add_node("a");
    let b = graph.add_node("b");
    let c = graph.add_node("c");
    let d = graph.add_node("d");

    graph.extend_with_edges(&[(a, b, 1), (b, c, 1), (c, d, 1), (a, b, 1), (b, d, 1)]);
    let paths_cost = dijkstra(&graph, a, Some(d), |e| *e.weight());
    println!("dijkstra {:?}", paths_cost);

    let …
Run Code Online (Sandbox Code Playgroud)

rust petgraph

6
推荐指数
1
解决办法
1215
查看次数

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

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

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

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

我知道如何启用可选的板条箱功能。我的问题旨在使序列化和反序列化正常工作。

graph rust serde petgraph

4
推荐指数
1
解决办法
1214
查看次数

从 JSON 加载的 Vec&lt;(String, String)&gt; 创建 Petgraph 图

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

我设法创建了一个Vec<(String, String))>但不是Vec<(&str, &str)>预期的。

extern crate petgraph;
extern crate serde_json;

use petgraph::prelude::*;
use serde_json::{Value, Error};

fn main() {
    let data = r#"{
      "A": [ "B" ],
      "B": [ "C", "D" ],
      "D": [ "E", "F" ]
    }"#;
    let json_value: Value = serde_json::from_str(data).unwrap();
    let mut edges: Vec<(String, String)> = vec![];
    if let Value::Object(map) = json_value {
        for (from_edge, array) in &map {
            if let &Value::Array(ref array_value) = array …
Run Code Online (Sandbox Code Playgroud)

rust petgraph

3
推荐指数
1
解决办法
517
查看次数

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

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

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

rust petgraph

3
推荐指数
1
解决办法
2243
查看次数

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

我正在使用 Petgraph 的toposort函数来获取图表节点的排序列表。toposort然而,不保证同一级别的所有节点都将以一致的确定性顺序返回。Petgraph 中是否还有其他选项可以按确定性顺序返回节点,或者我需要编写自己的函数吗?(如果是的话,有什么指示吗?)

non-deterministic rust petgraph

3
推荐指数
1
解决办法
547
查看次数

标签 统计

petgraph ×5

rust ×5

graph ×1

non-deterministic ×1

serde ×1