我的python程序中存在一个问题,它产生了一个邻接列表。列表本身工作正常,但程序将查看va和vb之间是否存在路径(a到b)。问题是即使在弄乱了元组和括号之后,if语句也完全被忽略了。 if应该验证是否有路径,以及是否有发送消息。如果没有路径,则变量将递增,直到循环结束。如果它在没有找到路径的情况下结束,则会出现失败消息。 这是代码: grafo是图表类型。
class graph:
v = 0
a = 0
node = []
class vertex:
ta = []
adj = {}
def caminhografo(grafo, va, vb):
vat = defaultdict(list)
i = 0
a = 0
z = 0
vo = int(va)
vq = int(vb)
vz = int(va)
vw = int(vb)
x = len(grafo.node)
if vz < vw:
for vz in range (vw+1):
a = 0
x = len(grafo.node)
for a in range (x):
if [int(vz),int(a)] in grafo.node:
vat[vz].append(a)
if vz > vw:
while vz > vw:
a = 0
x = len(grafo.node)
for a in range (x):
if[int(va),int(a)] in grafo.node:
vat[vz].append(a)
vz = vz - 1
a = 0
x = len(grafo.node)
print(vat)
z = 0
#Problem starts here, after adjacency list is complete, none of the if's work and There is never a path between vertex.
for z in range (x):
if (vo,vq) in vat:
print("""
==============================================
Existe Caminho
==============================================
""")
break
elif (vo,z) in vat:
vo = z
print("""
==============================================
Não Existe Caminho
==============================================
"")
因此,如果我在顶点0和1之间插入弧后将va和vb发送为0和1,则输出显示(0:[1],1:[0])。这意味着这些顶点之间存在路径。除了最后的if,它应该验证路径,但永远不会成功。
我也使用defaultdict,邻接列表是defaultdict的列表字典。 最后的输出总是(“NãoexisteCaminho”),(“No Path”),这是最后的印刷品。
感谢您的帮助。
答案 0 :(得分:0)
您的if
州正在寻找字典中的元组。但他们不会找到它们,因为你的字典使用单个值作为键。
我想你希望你的支票是:
if vo in vat and vq in vat[vo]:
这些检查中的第一项甚至不是严格要求的,因为vat
是defaultdict
(但它有助于避免添加不需要的空列表)。
但可能还有其他一些问题。我真的不明白你的z
循环或elif
块应该做什么。此外,即使找到路径,也会始终显示"Não Existe Caminho"
文本。