2 qq 34580659 qq_34580659 于 2016.04.12 00:17 提问

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

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

2个回答

CSDNXIAOD
CSDNXIAOD   2016.04.12 00:22

N 皇后问题
N个皇后问题!!!
M*N棋盘上的K皇后问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

curry_du
curry_du   2016.04.12 08: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();  
    }  

}  
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!