Domanda

Quindi, posso attraversare la lista, ma non può stampare ogni livello. Non so come fare.

ho qualcosa di simile a questo:

$list = {
  "A" => ["C","D","E"],
  "B" => ["C","F"],
  "C" => ["A","B","D","F","E"],
  "D" => ["A","C","E"],
  "E" => ["A","C","D"],
  "F" => ["B","C"]
 }


def BFS2()
  queue = ["A"]
  visited = {"A"=>true}
  print "A "
    while(!queue.empty?)
      node = queue.pop()
      $list[node].each do |child|
        if visited[child] != true then
           print "#{child} "
           queue.push(child)
           visited[child] = true
         end
      end
    end
end

invece di stamparlo come

A C D E B F

id come stamparlo come così

A
C D E
B F

Ho provato un paio di cose diverse, ma io non riesco a farlo. Qualsiasi aiuto sarebbe apprezzato, grazie.

È stato utile?

Soluzione

La soluzione ha richiesto il controllo per vedere se si sarebbe in realtà stampato qualcosa per un determinato nodo in modo che non abbiamo aggiunto un \n in più per i nodi che non avrebbe dovuto stampati nulla.

Soluzione

aggiungere il \n appropriata è, se necessario.

def BFS2()
  queue = ["A"]
  visited = {"A"=>true}
  puts "A "
    while(!queue.empty?)
      do_print = false
      node = queue.pop()
      $list[node].each do |child|
        if visited[child] != true then
           print "#{child} "
           queue.push(child)
           visited[child] = true
           do_print = true
        end
      end
      if do_print == true
        print "\n "
      end
    end
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top