[英]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:根據要求,這里是輸入和輸出:我得到了圖,開始和退出節點以及所需的長度,並返回了訪問量最大的節點的所需長度的路徑。
聽起來像是一個組合問題。 由於您沒有固定的最終狀態。
讓我們列出我們所知道的。
在此示例中,我將使用基於節點總數的最大深度的遞歸。 雖然我不會做家庭作業,但我將嘗試使用偽代碼開始。
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.