0

我在创建邻接列表的 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ão existse Caminho"),("No Path"),即最终打印。

感谢您的任何帮助。

4

1 回答 1

0

您的if语句正在字典中查找元组。但是他们不会找到它们,因为您的字典使用单个值作为键。

我想你希望你的支票是:

if vo in vat and vq in vat[vo]:

这些检查中的第一个甚至不是严格要求的,因为vat是 a defaultdict(但它有助于避免添加不需要的空列表)。

不过可能还有其他一些问题。我真的不明白你的z循环或elif块应该做什么。此外,"Não Existe Caminho"即使找到路径,您的文本也将始终显示。

于 2013-10-15T23:20:57.677 回答