import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
Queue queue=new Queue();
queue.test();
}
}
class Queue {
private static boolean Correct(int col, int row, int count, int[] path) {
boolean c = true;
int left = col - 1;
int right = col + 1;
for (int i = row - 1; i >= 0; i--)
{
if (path[i] == col) {
c = false;
break;
}
if (left >= 0 && path[i] == left)
{
c = false;
break;
}
if ( right< count && path[i] == right)
{
c = false;
break;
}
left--;
right++;
}
return c;
}
public static void find(int queuecount, int Row, int[] path, LinkedList<int[]> Solution) {
if (queuecount == Row) {
Solution.add((int[])path.clone());
return;
}
for (int a = 0; a < queuecount; ++a) {
if (Correct(a, Row, queuecount, path)) {
path[Row] = a;
find(queuecount, Row + 1, path, Solution);
}
}
}
public static LinkedList<int[]> solve(int count) {
LinkedList<int[]> Solution = new LinkedList<int[]>();
int[] path = new int[count];
find(count, 0, path, Solution);
return Solution;
}
public static void Printf(int Count, LinkedList<int[]> solution) {
System.out.println("八皇后问题解决方案有:" + solution.size()+"种" );
for (int[] solutions:solution) {
for (int i = 0; i < solutions.length; ++i) {
for (int j = 0; j <Count; j++) {
if (j == solutions[i])
{
System.out.print('1');
}
else
{
System.out.print('0');
}
}
System.out.println();
}
System.out.println();
}
}
public static void test() {
LinkedList<int[]> solution = solve(4);
Printf(4, solution);
}
}