Queen.rb
class Queen def initialize() @v=0 end def canSetQueen(lst,s,x,y) lstNo = Array.new() for i in 0..s-1 do p = Pt.new(x,i) lstNo.push(p) end for j in 0..s-1 do p = Pt.new(j,y) lstNo.push(p) end x0=x y0=y while x0<s and y0<s p=Pt.new(x0,y0) lstNo.push(p) x0=x0+1 y0=y0+1 end x0=x y0=y while x0>=0 and y0>=0 p=Pt.new(x0,y0) lstNo.push(p) x0=x0-1 y0=y0-1 end x0=x y0=y while x0>=0 and y0<s p=Pt.new(x0,y0) lstNo.push(p) x0=x0-1 y0=y0+1 end x0=x y0=y while x0<s and y0>=0 p=Pt.new(x0,y0) lstNo.push(p) x0=x0+1 y0=y0-1 end while(lstNo.length>0) p=lstNo.pop if(p.y==lst[p.x]) return false end end return true end def findQueen(lst,s,x) if(x>=s) @v=@v+1 puts("]>>solution No."+@v.to_s) pp lst return end for y in 0..s-1 do if(canSetQueen(lst,s,x,y)) lst.push(y) findQueen(lst,s,x+1) lst.pop end end end end class Pt attr_accessor:x attr_accessor:y def initialize(x,y) @x=x @y=y end end
test.rb
require "pp" require "./Queen.rb" len = 8 lst = Array.new() q=Queen1.new q.findQueen(lst,len,0) puts("end")