qq_34580659 2016-04-11 16:17 采纳率: 9.1%
浏览 2976

个C++中皇后问题的题。在n*n棋盘中如何摆n个皇后使其互相都不挡道?用java写可以吗!?怎么写?

个C++中皇后问题的题。在n*n棋盘中如何摆n个皇后使其互相都不挡道?用java写可以吗?怎么写?

  • 写回答

1条回答 默认 最新

  • curry_du 2016-04-12 00:04
    关注

    八皇后问题,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();  
        }  
    
    }  
    
    评论

报告相同问题?

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法