八皇后问题

<pre name="code" class="java">
public class Queen8 {
	public static int num = 0; //累计方案总数  
    public static final int MAXQUEEN = 4;//皇后个数,同时也是棋盘行列总数  
    public static int[] cols = new int[MAXQUEEN]; //定义cols数组,表示8列棋子摆放情况     cols[1]==1表示第一列的第一行有棋子
    public Queen8() {  
       //核心函数  
      getArrangement(0);  
      System.out.println(MAXQUEEN+"皇后问题有"+num+"种摆放方法。");  
    }  
      
    public void  getArrangement(int n){  //遍历第n列的棋子可能性
     //遍历该列所有不合法的行,并用rows数组记录,不合法即rows[i]=true  
     
     boolean[] rows = new boolean[MAXQUEEN];      //默认为false
     
     for(int i=0;i<n;i++){  
        rows[cols[i]]=true;          //当前列N的棋子不能放在前面列m的棋子所在行
        int d = n-i;  
        if(cols[i]-d >= 0){
        	rows[cols[i]-d]=true;      //该句用于设置当前列N的棋子不能放在前面列m的棋子的斜线上
        }
        if(cols[i]+d <= MAXQUEEN-1) {
        	rows[cols[i]+d]=true;      // 该句用于设置当前列N的棋子不能放在前面列m的棋子的反斜线上
        }
        
     }  
     
     for(int i=0;i<MAXQUEEN;i++){  
       if(rows[i])continue;      //判断该行是否合法    
       cols[n] = i;              //设置当前列合法棋子所在行数
       if(n<MAXQUEEN-1){         //当前列不为最后一列时 
         getArrangement(n+1);  
       }else{  
         num++;                  //累计方案个数  
         printChessBoard();       //打印棋盘信息 
       }   
        
        
     }  
       
    }  
    public void printChessBoard(){  
         
       System.out.println("第"+num+"种走法 ");  
         
       for(int i=0;i<MAXQUEEN;i++){  
         for(int j=0;j<MAXQUEEN;j++){  
           if(i==cols[j]){  
             System.out.print("0 ");  
           }else  
             System.out.print("+ ");  
         }  
         System.out.println();  
       }  
         
    }  
    public static void main(String args[]){  
      Queen8 queen = new Queen8();  
    }  
}



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值