八皇后问题

  class QueensApp
  {
    private int[] intArray;
private int nElems;
private int count;

public QueensApp(int len)
{
  intArray = new int[len];
  nElems = len;
}

    public int getCount()
{
   return this.count;
}

private boolean isConsistent(int n)
{
  for(int i = 0; i < n; i++)
  {
    if (intArray[i] == intArray[n]) return false;  //same row
if (intArray[n] - intArray[i] == n - i) return false;  //same major diagonal
if (intArray[i] - intArray[n] == n - i) return false;  //same minor diagonal
  }
 
  return true;
}

private void printQueens()
{
  for (int i = 0; i < nElems; i++)
  {
    for (int j = 0; j < nElems; j++)
{
  if (intArray[i] == j)
    System.out.print("● ");
  else
    System.out.print("○ ");
}
System.out.println();
  }
   count++;
   System.out.println();
}

   public void enumerate(int n)
{
   if (n == nElems)
     printQueens();
   else
   {
     for (int i = 0; i < nElems; i++)
{
   intArray[n] = i;
  
   if (isConsistent(n))
      enumerate(n + 1);
}
   }
}
  
   public static void main(String[] args)
{
    QueensApp app = new QueensApp(Integer.parseInt(args[0]));
        app.enumerate(0);
System.out.println(app.getCount());
    }
 
  }

你可能感兴趣的:(回溯法,八皇后问题精简解法)