簡體   English   中英

在有向圖中找到具有給定長度的路徑,允許循環和負長度

[英]Find a path in a directed graph with a given length, allowing for loops and negative lengths

我有一個最多7個節點的有向圖。 每個節點都通過有向邊連接到每個其他節點(當然不包括其自身),並且邊的權重可以為正或負。 我的目標是找到從一個給定節點到另一節點的路徑,以使該路徑具有特定的長度。 但是,有一個陷阱。 我不僅可以利用循環,而且即使到達終點節點,路徑也不必立即結束。 這意味着我可以有一條通向端節點的簡單路徑,然后有一個從端節點出來的循環,最終引回到自身。 同時,我必須最大化此路徑訪問的唯一節點的數量 ,這樣,如果有多個具有所需長度的路徑,我將得到其中包含最多節點的路徑。

除了循環問題之外,我還無法以其他更簡單的問題來重述此問題,例如最短路徑或旅行推銷員。 我不確定如何開始解決此問題。 我有一個想法,就是找到所有簡單的路徑和所有循環,然后遞歸地將它們結合起來,但這帶來了循環在循環內的問題。 有沒有更有效的方法來解決這個問題?

順便說一句,我是用python編寫的。

編輯:另一件事我忘了提到,節點之間的成對有向邊不一定必須具有相同的權重。 因此A-> B的權重為-1,但B-> A的權重為9。

編輯2:根據要求,這里是輸入和輸出:我得到了圖,開始和退出節點以及所需的長度,並返回了訪問量最大的節點的所需長度的路徑。

聽起來像是一個組合問題。 由於您沒有固定的最終狀態。

讓我們列出我們所知道的。

  • 每個節點都與其他每個節點相連,盡管它是定向的。 這是一本完整的圖。 鏈接: https : //en.wikipedia.org/wiki/Complete_graph
  • 當算法超過所需距離時,您可以切斷算法。
  • 但是要注意無限循環。 如果負權重等於負權重,則可能。

在此示例中,我將使用基於節點總數的最大深度的遞歸。 雖然我不會做家庭作業,但我將嘗試使用偽代碼開始。

def recursion(depth, graph, path, previous_node, score, results):
    // 1A. Return if max depth exceeded
    // 1B. Return if score exceeded 
    // 1C. Return if score match AND append path to results

    // 2. iterate and recurse through graph:
    for node in graph:
        path.append(node.name)
        score += node.weight
        recursion(depth, graph, path, node, score, results)

    return results

# The results should contain all the possible paths with the given score.

這就是我要開始的地方。 祝好運。

暫無
暫無

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

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