用java实现八皇后

public class Queen8 { 
    public static int num = 0; //累计方案总数 
    public static final int MAXQUEEN = 8;//皇后个数,同时也是棋盘行列总数 
    public static int[] cols = new int[MAXQUEEN]; //定义cols数组,表示8列棋子摆放情况 
    public Queen8() { 
       //核心函数 
      getArrangement(0); 
      System.out.print("\n"); 
      System.out.println(MAXQUEEN+"皇后问题有"+num+"种摆放方法。"); 
    } 
     
    public void  getArrangement(int n){ 
     //遍历该列所有不合法的行,并用rows数组记录,不合法即rows[i]=true 
     boolean[] rows = new boolean[MAXQUEEN]; 
     for(int i=0;i<n;i++){ 
       rows[cols[i]]=true; 
        int d = n-i; 
        if(cols[i]-d >= 0)rows[cols[i]-d]=true; 
        if(cols[i]+d <= MAXQUEEN-1)rows[cols[i]+d]=true;  
       
     } 
     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.print("第"+num+"种走法\n"); 
        
       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.print("\n"); 
       } 
        
    } 
    public static void main(String args[]){ 
      Queen8 queen = new Queen8(); 
    } 
    

转载于:https://www.cnblogs.com/chang1023/p/5890763.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值