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());
}
}
{
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());
}
}