【问题标题】:Finding the shortest path in a complex data structure with looping nodes在具有循环节点的复杂数据结构中查找最短路径
【发布时间】:2013-05-29 08:51:26
【问题描述】:

这是我存储在 JSON 中的数据结构示例:

{ “α”: { “节点1”:“回声”, “node2”:“好极了” }, “好极了”:{ “节点1”:“阿尔法”, “node2”:“好极了”, “node3”:“查理” }, “查理”:{ “node1”:“好极了”, “node2”:“狐步舞” }, “三角洲”:{ “节点1”:“阿尔法”, “节点2”:“酒店” }, “回声”:{ “node1”:“高尔夫”, “节点2”:“三角洲” }, “狐步舞”:{ “节点1”:“回声”, “node2”:“印度”, “节点3”:“三角洲” }, “高尔夫”:{ "node1": "酒店", “节点2”:“查理” }, “酒店”: { “node1”:“狐步舞”, “node2”:“印度” }, “印度”: { “node1”:“查理”, “节点2”:“酒店” } }

我正在寻找任何两个节点之间的最短路径。比如echohotel的最短路径是:echo -> golf -> hotel

如您所见,这些节点是循环的,并且可以无休止地遍历它们。我还应该注意,节点路径都是一种方式。所以使用上面同样的例子,从hotel回到echo的最短路径是:hotel -> foxtrot -> echo

这样的数据结构有名称吗?我知道循环打破了“树”的规则。这会是图遍历吗?

【问题讨论】:

  • BFS 在这里可能会有所帮助。
  • 你试过什么?谷歌“图最短路径”为您提供了一些关于典型算法的链接。

标签: python json traversal tree-traversal graph-traversal


【解决方案1】:

您拥有的是adjacency list。虽然有这样的东西更干净(删除 node1,node2 使其成为一个简单的数组):

{
    "alpha": [
        "echo",
        "bravo"
    ],
    "bravo": [
        "alpha",
        "bravo",
        "charlie"
    ],
    ...
    "india": [
        "charlie",
        "hotel"
    ]
}

没有给出权重/距离,因此您可以使用 BFS 找到最短路径。 Here 是一个实现。

【讨论】:

    【解决方案2】:

    您正在寻找的是通过图表的最短路径。看看这个:

    http://networkx.github.io/documentation/latest/reference/algorithms.shortest_paths.html

    【讨论】:

      猜你喜欢
      • 2019-05-27
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多