首页 > 代码库 > 八皇后

八皇后

  1. public class Queen8 {  
  2.     public static int num = 0; //累计方案总数  
  3.     public static final int MAXQUEEN = 8;//皇后个数,同时也是棋盘行列总数  
  4.     public static int[] cols = new int[MAXQUEEN]; //定义cols数组,表示8列棋子摆放情况  
  5.     public Queen8() {  
  6.        //核心函数  
  7.       getArrangement(0);  
  8.       System.out.print("/n");  
  9.       System.out.println(MAXQUEEN+"皇后问题有"+num+"种摆放方法。");  
  10.     }  
  11.       
  12.     public void  getArrangement(int n){  
  13.      //遍历该列所有不合法的行,并用rows数组记录,不合法即rows[i]=true  
  14.      boolean[] rows = new boolean[MAXQUEEN];  
  15.      for(int i=0;i<n;i++){  
  16.         rows[cols[i]]=true;  
  17.         int d = n-i;  
  18.         if(cols[i]-d >= 0)rows[cols[i]-d]=true;  
  19.         if(cols[i]+d <= MAXQUEEN-1)rows[cols[i]+d]=true;   
  20.         
  21.      }  
  22.      for(int i=0;i<MAXQUEEN;i++){  
  23.        //判断该行是否合法    
  24.        if(rows[i])continue;  
  25.        //设置当前列合法棋子所在行数  
  26.        cols[n] = i;  
  27.        //当前列不为最后一列时  
  28.        if(n<MAXQUEEN-1){  
  29.          getArrangement(n+1);  
  30.        }else{  
  31.   
  32.         //累计方案个数  
  33.          num++;  
  34.          //打印棋盘信息  
  35.          printChessBoard();  
  36.        }   
  37.         
  38.         
  39.      }  
  40.        
  41.     }  
  42.     public void printChessBoard(){  
  43.          
  44.        System.out.print("第"+num+"种走法 /n");  
  45.          
  46.        for(int i=0;i<MAXQUEEN;i++){  
  47.          for(int j=0;j<MAXQUEEN;j++){  
  48.            if(i==cols[j]){  
  49.              System.out.print("0 ");  
  50.            }else  
  51.              System.out.print("+ ");  
  52.          }  
  53.          System.out.print("/n");  
  54.        }  
  55.          
  56.     }  
  57.     public static void main(String args[]){  
  58.       Queen8 queen = new Queen8();  
  59.     }  
  60.      
  61. }  

八皇后