Skip to content

Instantly share code, notes, and snippets.

@dejw
Created October 14, 2009 19:58
Show Gist options
  • Select an option

  • Save dejw/210352 to your computer and use it in GitHub Desktop.

Select an option

Save dejw/210352 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
def print_board(board)
board.each do |row|
row.each do |i|
print (i ? "x" : ".")
end
puts
end
puts
1
end
def queens(b, c, l, r, k, n)
if k == n
print_board(b)
else
count = 0
n.times do |i|
unless c[i] or l[k+i+1] or r[i-k+1]
b[i][k] = c[i] = l[k+i+1] = r[i-k+1] = true
count += queens(b, c, l, r, k+1, n)
b[i][k] = c[i] = l[k+i+1] = r[i-k+1] = false
end
end
count
end
end
n = if ARGV.length == 0
print "Podaj wielkosc planszy (domyslnie 8): "
((line = gets).strip != "" ? line.to_i : 8)
else
ARGV[0].to_i
end
r = queens(
Array.new(n) { Array.new(n, false) }, # plansza
Array.new(n, false), # kolumny
Array.new(2*n, false), # lewa diagonala
Array.new(2*n, false), # prawa diagonala
0, # postaw hetmana w pierwszej kolumnie
n # N kolumn
)
puts "Rozwiazan: #{r}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment