当前位置: 首页 > 知识库问答 >
问题:

在具有循环节点的复杂数据结构中寻找最短路径

孟正志
2023-03-14

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

{
    "alpha": {
        "node1": "echo",
        "node2": "bravo"
    },
    "bravo": {
        "node1": "alpha",
        "node2": "bravo",
        "node3": "charlie"
    },
    "charlie": {
        "node1": "bravo",
        "node2": "foxtrot"
    },
    "delta": {
        "node1": "alpha",
        "node2": "hotel"
    },
    "echo": {
        "node1": "golf",
        "node2": "delta"
    },
    "foxtrot": {
        "node1": "echo",
        "node2": "india",
        "node3": "delta"
    },
    "golf": {
        "node1": "hotel",
        "node2": "charlie"
    },
    "hotel": {
        "node1": "foxtrot",
        "node2": "india"
    },
    "india": {
        "node1": "charlie",
        "node2": "hotel"
    }
}

我正在寻找任何两个节点之间的最短路径。例如,从echohotel的最短路径是:echo-

如您所见,这些节点是循环的,可以无休止地遍历它们。我还应该注意,节点路径都是单向的。因此,使用上面相同的示例,从酒店返回回声的最短路径是:酒店-

这样的数据结构有名字吗?我知道循环违反了“树”的规则。这是图形遍历吗?

共有2个答案

宰子琪
2023-03-14

你要找的是图中的最短路径。看看这个:

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

乐正明辉
2023-03-14

您拥有的是一个邻接列表。尽管这样做比较干净(删除节点1、节点2使其成为一个简单的数组):

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

没有给出权重/距离,所以你可以用BFS找到最短的路径。这里有一个实现。

 类似资料:
  • 我有一个加权和无向图,有顶点。其中两个顶点是和。 我需要找到最短的路径,从开始,在结束,并通过G的所有顶点(以任何顺序)。 如何做到这一点? 这不是旅行推销员问题:我不需要访问每个顶点一次,也不想回到第一个顶点。

  • 我正在上面的图上运行广度优先搜索,查找从到的最短路径。 我的代码 我需要追踪BFS ALGO通过的节点。遍历以到达节点6,如。为此,我创建了一个名为的列表&试图存储访问节点的前一个节点,以获得节点列表。转介

  • 我确实有一个图(~250个节点)。要连接到一个节点,我必须用points->加权图购买它。有些节点总是被占用(“声明的节点”),我可以从这些节点开始连接到其他节点。此外,我的点数有限。所有节点都可以连接在一起。 有什么方法可以得到一个图,其中所有的节点都必须连接在一起,点最少?如果可能的话,以给定的最大点数。 第二)有没有一种方法可以使它不需要一个完全连通的图?例如:一个“必须有节点”的节点直接连

  • Dijkstra算法说 对于图中给定的源节点,算法找到该节点和其他节点之间的最短路径 我得到了算法来找到那个节点和其他节点之间的最短路径。但是我的问题是,如果我需要为Linkedin/facebook这样的大图找到两个特定节点(比如N1和N2)的最短路径,我需要计算该节点N1和领英上其他节点(用户,意味着十亿用户)之间的距离吗首先,将其存储在高速缓存中,然后在询问两个节点的最短距离时从高速缓存中返

  • 我需要为一组有向无环图找到从节点 0 开始的最长路径。我正在使用维基百科中的最长路径问题算法。我已经让算法适用于大多数图形,但对于其他图形,它没有给出正确的结果。算法为: 图形实现使用邻接列表来存储图形。如果我传递一个图,例如: 我得到的答案5,这是正确的。但是,如果我通过图表: 然后我得到2,而正确答案应该是3。 我使用的TopSort2算法是: DFS 算法包括:

  • 我有一个树数据结构,其中每个节点可以有任意数量的子节点,树可以是任何高度的。获取树中所有叶节点的最佳方法是什么?有没有可能比遍历树中的每个路径更好,直到我到达叶节点? 在实践中,树的最大深度通常为 5 左右,树中的每个节点将有大约 10 个子节点。 我对其他类型的数据结构或特殊树持开放态度,这将使获取叶节点特别理想。 我正在使用javascript,但实际上只是在寻找一般建议,任何语言等。 谢啦!