package day04;
public class QueenQuestion {
private static final int LEN = 8;
private int count =0; //已经放皇后数量 private int sum =0; // 总共方法的数量 private int[][] ary = new int[LEN][LEN];
public boolean islineSame(int j){ // 判断同一列是否有皇后 for(int i=0;ireturn true; }public boolean isdiagonal(int m,int n){ int i; int j;
for(i=m,j=n;iif(ary[i][j]==1) return false; }for( i=m,j=n;i>=0&&j>=0;i--,j--){//判断右斜线上是否有皇后 if(ary[i][j]==1) return false; }
for( i=m,j=n;i>=0&&jfor( i=m,j=n;i=0;i++,j--){//判断左斜线上是否有皇后 if(ary[i][j]==1) return false; }return true; }
public void printAry(){// 显示八皇后的放法
System.out.println(\"-----第\"+sum+\"种放法------\"); for(int i=0;i }for(int j=0;jSystem.out.print(ary[i][j]+\" \"); }System.out.println(); } }
public void doCount(int i){ while(ifor(int j=0;jif(islineSame(j)&&isdiagonal(i,j)){ ary[i][j]=1; count++;if(count==LEN){//退回一步再找其他放法 sum++;
printAry(); ary[i][j]=0; count--; continue; }
doCount(i+1); ary[i][j]=0; count--; } }
return; } }
public static void main(String[] args){ QueenQuestion q = new QueenQuestion(); q.doCount(0); }