簡體   English   中英

在具有循環節點的復雜數據結構中查找最短路徑

[英]Finding the shortest path in a complex data structure with looping nodes

這是我存儲在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 > golf > hotel

如您所見,這些節點正在循環,可以無休止地遍歷它們。 我還要注意,節點路徑都是一種方式。 因此,使用上述同樣的例子,從最短路徑hotelecho的是: hotel - > foxtrot - > echo

這樣的數據結構有名稱嗎? 我知道循環會破壞“樹”的規則。 這是圖遍歷嗎?

您所擁有的是鄰接表 盡管擁有這樣的東西更干凈(刪除node1,node2使其成為一個簡單的數組):

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

沒有給出權重/距離,因此您可以使用BFS查找最短路徑。 是一個實現。

您正在尋找的是通過圖形的最短路徑。 看一下這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM