修改后的N个皇后区,并放置女王

时间:2019-01-15 22:34:52

标签: java n-queens

因此,我正在使用Backtracking创建一个N Queens问题解决程序。然而,不同之处在于,第一个皇后由用户放置,然后运行回溯以处理其他七个皇后。我的程序可以执行此任务,并且回溯功能正常,但是我只能将女王/王后放在左第一列,因为该功能所采用的参数是开始回溯程序的列。

董事会课程

 public boolean solveQueen( int col) { 
     if(col >= board.length) {   
         printBoard();
         System.out.println("queen" );
         return true; 

     }

     for(int i = 0; i < board.length; i++)
         if(notUnderAttack(i,col)) 
         {
             placeQ(i,col);
             solveQueen(col +1);
             removeQ(i, col);  


         }

     return false;         
 }

主班

     queen.placeQ(0, 2);

     queen.solveQueen(3);

     queen.printBoard();

因此,为解决此问题,我尝试环绕第一个皇后并在初始放置后开始回溯一列,但是这里的问题是,尽管将皇后放在第3、4、5、6、7列,预先放置的皇后在第二列,第一列没有皇后。我不太确定如何在第一栏中添加女王。我尝试使用模数,但是不确定是否正确实现了模数,所以我将其删除。

布尔布尔值notUnderAttack(int row,int col){

    if ( (rowCheck(row) == false) || (colCheck(col) == false) || (diagonalCheck(row, col) == false) ) {
        return false; 
    }
    return true; 
}

1 个答案:

答案 0 :(得分:0)

您可以存储首个皇后的列,然后跳过该列solveQueen。要么。创建一个方法,该方法已经在该列中检查了一个女王/王后,并根据此跳过。然后,如果您只想放置第一个皇后,则始终只需致电solveQueen(1),第一个解决方案是不错的(效率更高)。如果您可以扩展它以处理多个放置的初始皇后,则第二个更好。