私はプログラミング初心者です。私はルビーを学び、私はハッカーの問題に悩まされています。ソリューション全体ではなく、プログラムのスピードだけで... 問題は、n(umber)のクイーンをボードn * nに再帰で配置することです。 ここで私が提出したソリューションです:私はあなたが助けることができたら... それが少し速かった読みが、ので、私はしばらくの代わりに、それぞれの使用rubyで再帰が遅すぎる
def is_attacked(x,y,n,chess_board)
return true if chess_board[x].include?(1)
sum=x+y
diff=x-y
p=0
while p<=n-1
return true if p!=x && chess_board[p][y]==1
q=0
while q<=n-1
(((p+q==sum)||(p-q==diff)) && chess_board[p][q]==1) ? (return true) : q+=1
end
p+=1
end
return false
end
def n_Queens(n,n_fix,chess_board)
return true if n==0
i=0
while i<=n_fix-1
j=0
while j<=n_fix-1
if is_attacked(i,j,n_fix,chess_board)
j+=1
next
else
chess_board[i][j]=1
n_Queens(n-1,n_fix,chess_board) ? (return true) : chess_board[i][j]=0
end
j+=1
end
i+=1
end
return false
end
n=gets.chomp.to_i
n_fix=n
chess_board=Array.new(n) {Array.new(n,0)}
if n_Queens(n,n_fix,chess_board)
chess_board.each do |line|
puts line.join(" ")
end
else
puts "Not possible"
end
が、私は感謝し、確かに自分のスキルを配置しますより良いレベル。 ありがとう
私はRubyについてはわかりませんが、あなたの再帰的な解決策はすべての再帰オブジェクトのコピーを作成していませんか?それは高価になるでしょう。 – Carcigenicate
hackerearthコンパイラでの問題は、最後の入力である:10. –
あなたはすべての可能なショートカットを使用のようにそれは見ていません。 N-Queenの問題は、1列に1つのクイーンがあります。したがって、問題に対する通常の解決方法には、 '' queen [col] 'が列の列の女王の行であるというようなものがあります。その後、列の上に再帰し、(深さ8)ソリューションのコードがそのように動作しますか何かをしようとした場合、 ''私は本当に見ることができないで設定を見つけるまで、各列の行を「してみてください」。 – BitTickler