2

したがって、リストをトラバースすることはできますが、各レベルを印刷することはできません。方法がわからない。

私はこのようなものを持っています:

$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

次のように印刷する代わりに

A C D E B F

idはそれをそのように印刷するのが好きです

A
C D E
B F

私はいくつかの異なることを試みましたが、私はそれを得ることができないようです。どんな助けでもありがたいです。

4

1 に答える 1

3

このソリューションでは、特定のノードに対して実際に何かを印刷したかどうかを確認する必要がありました。これにより、\n何も印刷されるべきではないノードに余分なものを追加しませんでした。

解決

必要に応じて適切なを追加し\nます。

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
于 2010-11-27T06:40:14.507 に答える