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 existe Caminho"),("No Path") であり、これが最終出力です。

ご協力ありがとうございます。

4

1 に答える 1

0

ステートメントifは、辞書でタプルを探しています。ただし、辞書は単一の値をキーとして使用するため、それらを見つけることはできません。

小切手を次のようにしたいと思います:

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

これらのチェックの最初のものは厳密には必須ではありませvatdefaultdict

とはいえ、まだ他にも問題があるかもしれません。zあなたのループやelifブロックが何をしているのかよくわかりません。さらに、"Não Existe Caminho"パスが見つかった場合でも、テキストは常に表示されます。

于 2013-10-15T23:20:57.677 に答える