回溯递归:八皇后
1 public static int[][] arry=new int[8][8];//棋盘,放皇后 2 public static int map=0;//存储方案结果数量 3 4 public static void main(String[] args) { 5 // TODO Auto-generated method stub 6 7 System.out.println("八皇后问题"); 8 findQueen(0); 9 System.out.println("八皇后问题共有:"+map+"种可能"); 10 } 11 12 public static void findQueen(int i){//寻找皇后节点 13 if(i>7){//八皇后的解 14 map++; 15 print();//打印八皇后的解 16 return; 17 } 18 19 for(int m=0;m<8;m++){//深度回溯,递归算法 20 if(check(i,m)){//检查皇后摆放是否合适 21 arry[i][m]=1; 22 findQueen(i+1); 23 arry[i][m]=0;//清零,以免回溯的时候出现脏数据 24 } 25 } 26 } 27 28 public static boolean check(int k,int j){//判断节点是否合适 29 for(int i=0;i<8;i++){//检查行列冲突 30 if(arry[i][j]==1){ 31 return false; 32 } 33 } 34 for(int i=k-1,m=j-1; i>=0 && m>=0; i--,m--){//检查左对角线 35 if(arry[i][m]==1){ 36 return false; 37 } 38 } 39 for(int i=k-1,m=j+1; i>=0 && m<=7; i--,m++){//检查右对角线 40 if(arry[i][m]==1){ 41 return false; 42 } 43 } 44 return true; 45 } 46 47 public static void print(){//打印结果 48 System.out.print("方案"+map+":"+"\n"); 49 for(int i=0;i<8;i++){ 50 for(int m=0;m<8;m++){ 51 if(arry[i][m]==1){ 52 //System.out.print("皇后"+(i+1)+"在第"+i+"行,第"+m+"列\t"); 53 System.out.print("o "); 54 } 55 else{ 56 System.out.print("+ "); 57 } 58 } 59 System.out.println(); 60 } 61 System.out.println(); 62 }
天助自助者