python - 如何使用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'
('S', 'A'): ('2', '2'), ('S', 'B'): ('3', 5'), ('S', 'C'): ('3', '6')
扩张:
('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')
输出(预期):
('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')}
我的代码所做的只是搜索字典中的每个键,然后查找第一个键的结束字符并与第二个键的开始字符进行比较。如果相同,那么我将其合并。然后我将组合这些字符的值并将其存储在一个集合中。
我也在学习,但我想尝试帮助,所以也许那里的一些专家可以帮助我们。
推荐阅读
- java - 如何从合并的excel单元格中获取价值?
- swift - 如果导航堆栈中不存在视图控制器,则推送它
- init - Voltdb init 遇到不可恢复的错误并正在退出
- java - 如何公开和@EmbeddedId 的字段
- tsql - SSIS中的同步参数问题
- javascript - 如何使用具有完整路径的 JavaScript 从服务器读取文本文件?
- c# - 遍历列表以获取“已检查”项目并将它们分配给属性 - HTTPPost
- lua - 使用 lua 读取特定行
- sql - SQL获取最近的日期,双向
- corda - 在 Corda 中,`FungibleAsset` 什么时候应该继承 `OnLedgerAsset`?