public class queen{
static int N;
public static void main(String[] args){
N=4;
new queen().queue(1);
}
public int queue(int k){
int number = 0;
if(k>N){
number++;
System.out.print(number+":");
for(int n=1 ; n<(N+1) ; n++){
System.out.print("("+n+","+point.singleton().array[n]+")"+" ");
}
System.out.println();
return -1;
}
for(int i=1 ; i<(N+1) ; i++){//THIS VARIABLE IS THE SYMBOL OF THE COLUMN
point.singleton().array[k]=i;//THE ORDER BETWEEN THESE TWO SENTENCE CAN NOT BE CHANGED,TAKE CARE OF THE JUDGE FUNCTION
if(queen.judge(k)){
queue(k+1);
}
}
return 0;
}
public static boolean judge(int k){//THIS FUNCTION IS USED TO JUDGE THE ROW WETHER OK OR NOT
for(int i=1 ; i<k ; i++){
if((Math.abs(i-k)==(Math.abs(point.singleton().array[i]-point.singleton().array[k]))||
(point.singleton().array[i]==point.singleton().array[k]))){
return false;
}
}
return true;
}
static class point{
private static point handle=null;
private int[] array = new int[N+1];
private static point singleton(){
if(handle == null){
handle = new point();
}
return handle;
}
private point(){
for(int i=0 ; i<array.length ; i++){
array[i]=0;
}
}
}
}
static int N;
public static void main(String[] args){
N=4;
new queen().queue(1);
}
public int queue(int k){
int number = 0;
if(k>N){
number++;
System.out.print(number+":");
for(int n=1 ; n<(N+1) ; n++){
System.out.print("("+n+","+point.singleton().array[n]+")"+" ");
}
System.out.println();
return -1;
}
for(int i=1 ; i<(N+1) ; i++){//THIS VARIABLE IS THE SYMBOL OF THE COLUMN
point.singleton().array[k]=i;//THE ORDER BETWEEN THESE TWO SENTENCE CAN NOT BE CHANGED,TAKE CARE OF THE JUDGE FUNCTION
if(queen.judge(k)){
queue(k+1);
}
}
return 0;
}
public static boolean judge(int k){//THIS FUNCTION IS USED TO JUDGE THE ROW WETHER OK OR NOT
for(int i=1 ; i<k ; i++){
if((Math.abs(i-k)==(Math.abs(point.singleton().array[i]-point.singleton().array[k]))||
(point.singleton().array[i]==point.singleton().array[k]))){
return false;
}
}
return true;
}
static class point{
private static point handle=null;
private int[] array = new int[N+1];
private static point singleton(){
if(handle == null){
handle = new point();
}
return handle;
}
private point(){
for(int i=0 ; i<array.length ; i++){
array[i]=0;
}
}
}
}