八后问题Ruby01

Queen.rb

class Queen
  
  def initialize()
    @v=0
  end
  
  def arrCopy2(arr)
    arr0=Array.new(arr.length)
    for i in 0..arr.length-1 do
      arr0[i]=Array.new(arr[i])
    end
    
    return arr0
  end
  
  def addQueen(arr,x,y)
    setQueen(arr,x,y,1)
  end
  
  def setQueen(arr,x,y,n)
    for i in 0..arr.length-1 do
      arr[x][i]=n
    end
    
    for j in 0..arr[x].length-1 do
      arr[j][y]=n
    end 
    
    x0=x
    y0=y
    while x0<arr.length and y0<arr&#91;x0&#93;.length
      arr&#91;x0&#93;&#91;y0&#93;=n
      x0=x0+1
      y0=y0+1
    end
    
    x0=x
    y0=y
    while x0>=0 and y0>=0
      arr[x0][y0]=n
      x0=x0-1
      y0=y0-1
    end
    
    x0=x
    y0=y
    while x0>=0 and y0<arr&#91;x0&#93;.length
      arr&#91;x0&#93;&#91;y0&#93;=n
      x0=x0-1
      y0=y0+1
    end
    
    x0=x
    y0=y
    while x0<arr.length and y0>=0
      arr[x0][y0]=n
      x0=x0+1
      y0=y0-1
    end
    
    return arr
  end
  
  def findQueen(arr,lst,x) 
    
    if(x>=arr.length)
      @v=@v+1
      puts("]>>solution No."+@v.to_s)
      pp lst
      return
    end
    
    for y in 0..arr[x].length-1 do
      if(arr[x][y]==0)
        lst.push(y)
        arr0=arrCopy2(arr)
        addQueen(arr,x,y)   
        findQueen(arr,lst,x+1)
        arr=arr0
        lst.pop
      end
    end
     
  end
  
end

test.rb

require "pp"
require "./Queen.rb"

len = 8
arr=Array.new(len){Array.new(len, 0)}
#fuck
#arr = Array.new(len, Array.new(len,0))

lst = Array.new()

q=Queen.new
q.findQueen(arr,lst,0)

puts("end")

Leave a Reply

Your email address will not be published. Required fields are marked *

*