- package com.mingrui.soft_struct;
- public class NewQueen{
- public static int [][] queen={{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}};
- public static int [][] queenCopy={{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},
- {0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0},{0,0,0,0,0,0,0,0}};
- //public static int start=0;
- public static boolean finalLine=false;
- public static int count=0;
- public static void main(String args[]){
- oneQueen(0,0,0);
- System.out.println(count);
- }
- //递归式queen
- public static void oneQueen(int line,int x,int y){
- //for(int i=line;i<8;i++){
- for(int j=0;j<8;j++){
- if(j==7&&checkQueen(line,j)==false){
- for(int yyy=0;yyy<8;yyy++)
- queen[line][yyy]=0;
- for(int yy=0;yy<8;yy++)
- queen[x][yy]=0;
- return;
- //i=-1;
- }
- if(checkQueen(line,j)==false)
- continue;
- else{
- queen[line][j]=1;
- if(line<=6)
- oneQueen(line+1,line,j);
- else
- finalLine=true;
- }
- //if(i>0)
- //return;
- if(line==7&&finalLine==true){
- count++;
- for(int m=0;m<8;m++){
- for(int n=0;n<8;n++){
- System.out.print(queen[m][n]);
- }
- System.out.println();
- }
- finalLine=false;
- }
- }
- //}
- }
- //对queen进行检验
- public static boolean checkQueen(int x,int y){
- if(checkRow(x,y)==0||checkLine(x,y)==0||checkNeglect(x,y)==0||checkRestrain(x,y)==0)
- return false;
- else
- return true;
- }
- //检验横向
- public static int checkRow(int x,int y){
- int boo=1;
- for(int i=0;i<8;i++){
- //if(i==y)
- //continue;
- if(queen[x][i]==1){
- boo=0;
- break;
- }
- else
- boo=1;
- }
- return boo;
- }
- //检验竖向
- public static int checkLine(int x,int y){
- int boo=1;
- for(int i=0;i<8;i++){
- //if(i==x)
- //continue;
- if(queen[i][y]==1){
- boo=0;
- break;
- }
- else
- boo=1;
- }
- return boo;
- }
- //检验撇
- public static int checkNeglect(int x,int y){
- int boo=1;
- if(x+y<=7){
- for(int i=0;i<x+y+1;i++){
- //if(i==x)
- //continue;
- if(queen[i][x+y-i]==1){
- boo=0;
- break;
- }
- else
- boo=1;
- }
- }
- else{
- for(int i=1;i<16-(x+y);i++){
- //if(i==x)
- //continue;
- if(queen[i+x+y-8][8-i]==1){
- boo=0;
- break;
- }
- else
- boo=1;
- }
- }
- return boo;
- }
- //检验捺
- public static int checkRestrain(int x,int y){
- int boo=1;
- if(x>=y){
- for(int i=0;i<8-(x-y);i++){
- //if(i==y)
- //continue;
- if(queen[i+x-y][i]==1){
- boo=0;
- break;
- }
- else
- boo=1;
- }
- }
- else{
- for(int i=0;i<8-(y-x);i++){
- //if(i==y)
- //continue;
- if(queen[i][i+(y-x)]==1){
- boo=0;
- break;
- }
- else
- boo=1;
- }
- }
- return boo;
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/040520149434.html
来源: http://www.codesnippet.cn/detail/040520149434.html