簡體   English   中英

如何使用python修復路徑中的循環?

[英]how to fix cycles in path using python?

我的圖中的計算周期有問題。 我想要

graph = {('S','A'): ('2','2'), ('A','S'): ('2','2'), ('S','B'): ('3','5'), ('B','S'): ('3','5'), ('S','C'): ('3','6'), ('C','S'): ('3','6'), ('B','D'): ('4','5'), ('D','B'): ('4','5'), ('A','C'): ('2','2'), ('D','C'): ('3','4'), ('C','D'): ('3','4'), ('T','C'): ('5','8'), ('C','T'): ('8','5'), ('T','D'): ('4','7'), ('D','T'): ('4','7')}

print(graph)

{('S', 'A'): ('2', '2'), ('S', 'C'): ('3', '6'), ('T', 'C'): ('5', '8'), ('A', 'S'): ('2', '2'), ('D', 'T'): ('4', '7'), ('C', 'D'): ('3', '4'), ('D', 'B'): ('4', '5'), ('S', 'B'): ('3', '5'), ('C', 'T'): ('8', '5'), ('C', 'S'): ('3', '6'), ('B', 'S'): ('3', '5'), ('T', 'D'): ('4', '7'), ('B', 'D'): ('4', '5'), ('D', 'C'): ('3', '4'), ('A', 'C'): ('2', '2')}

我想擴展圖形但不存在循環。 例如: vs = 'S' vt = 'T'

  1. ('S', 'A'): ('2', '2'), ('S', 'B'): ('3', 5'), ('S', 'C'): ('3', '6')
  2. 擴張:

    • ('S', 'A', 'C') : ('S', 'A') + ('A', 'C') = ('2', '2') + ('2', '2') =
      ('4', '4')
    • ('S', 'B', 'D') : ('S', 'B') + ('B', 'D') = ('3', '5') + ('4', '5') = ('7', '10')
    • ('S', 'C', 'A') : not expand
    • ('S', 'C', 'S') : not expand
    • ('S', 'C', 'T') : ('S', 'C') + ('C', 'T') = ('3', '6') + ('5', '8') = ('8', '14')
    • ('S', 'C', 'D') : ('S', 'C') + ('C', 'D') = ('3', '6') + ('3', '4') = ('6', '10')
  3. 輸出(預期):

    • ('S', 'A', 'C') : ('4', '4')
    • ('S', 'B', 'D') : ('7', '10')
    • ('S', 'C', 'A') : not expand
    • ('S', 'C', 'S') : not expand
    • ('S', 'C', 'T') : ('8', '14')
    • ('S', 'C', 'D') : ('6', '10')

你能幫我解決上面的問題嗎? 非常感謝..

我不明白你的問題,但這是你想要的嗎?

graph = {('S','A'): ('2','2'), ('A','S'): ('2','2'), ('S','B'): ('3','5'),
         ('B','S'): ('3','5'), ('S','C'): ('3','6'), ('C','S'): ('3','6'),
         ('B','D'): ('4','5'), ('D','B'): ('4','5'), ('A','C'): ('2','2'),
         ('D','C'): ('3','4'), ('C','D'): ('3','4'), ('T','C'): ('5','8'),
         ('C','T'): ('8','5'), ('T','D'): ('4','7'), ('D','T'): ('4','7')}

sub = {}

for keys, values in graph.items():
    for keys2, values2 in graph.items():
        if keys[1] == keys2[0]:
            key = keys + keys2[1:]
            valueB= int(values[0]) + int(values2[0])
            valueE = int(values[1]) + int(values2[1])
            value = (str(valueB), str(valueE))
            sub[key] = value
print(sub)

輸出:

{('S', 'A', 'S'): ('4', '4'), ('S', 'A', 'C'): ('4', '4'), ('A', 'S', 'A'): ('4', '4'), ('A', 'S', 'B'): ('5', '7'), ('A', 'S', 'C'): ('5', '8'), ('S', 'B', 'S'): ('6', '10'), ('S', 'B', 'D'): ('7', '10'), ('B', 'S', 'A'): ('5', '7'), ('B', 'S', 'B'): ('6', '10'), ('B', 'S', 'C'): ('6', '11'), ('S', 'C', 'S'): ('6', '12'), ('S', 'C', 'D'): ('6', '10'), ('S', 'C', 'T'): ('11', '11'), ('C', 'S', 'A'): ('5', '8'), ('C', 'S', 'B'): ('6', '11'), ('C', 'S', 'C'): ('6', '12'), ('B', 'D', 'B'): ('8', '10'), ('B', 'D', 'C'): ('7', '9'), ('B', 'D', 'T'): ('8', '12'), ('D', 'B', 'S'): ('7', '10'), ('D', 'B', 'D'): ('8', '10'), ('A', 'C', 'S'): ('5', '8'), ('A', 'C', 'D'): ('5', '6'), ('A', 'C', 'T'): ('10', '7'), ('D', 'C', 'S'): ('6', '10'), ('D', 'C', 'D'): ('6', '8'), ('D', 'C', 'T'): ('11', '9'), ('C', 'D', 'B'): ('7', '9'), ('C', 'D', 'C'): ('6', '8'), ('C', 'D', 'T'): ('7', '11'), ('T', 'C', 'S'): ('8', '14'), ('T', 'C', 'D'): ('8', '12'), ('T', 'C', 'T'): ('13', '13'), ('C', 'T', 'C'): ('13', '13'), ('C', 'T', 'D'): ('12', '12'), ('T', 'D', 'B'): ('8', '12'), ('T', 'D', 'C'): ('7', '11'), ('T', 'D', 'T'): ('8', '14'), ('D', 'T', 'C'): ('9', '15'), ('D', 'T', 'D'): ('8', '14')}

我的代碼所做的只是搜索字典中的每個鍵,然后查找第一個鍵的結束字符並與第二個鍵的開始字符進行比較。 如果相同,那么我將其合並。 然后我將組合這些字符的值並將其存儲在一個集合中。

我也在學習,但我想嘗試提供幫助,所以也許那里的一些專家可以幫助我們。

暫無
暫無

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

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