修改后的 N Queens 和 placed queen

Modified N Queens with placed queen

我正在使用回溯创建 N Queens 问题求解器。然而,扭曲是第一个皇后由用户放置,然后回溯 运行 处理其他 7 个皇后。我的程序可以完成此任务并且回溯功能正常,但我只能将皇后放在左第一列,因为函数采用的参数是开始回溯过程的列。

董事会class

 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;         
 }

主要class

queen.placeQ(0, 2);
queen.solveQueen(3);
queen.printBoard();

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

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

您可以存储初始皇后的列,然后跳过该列 solveQueen。要么。创建一个方法来检查列中是否有皇后并根据它跳过。然后总是只调用 solveQueen(1) 如果你只想放置第一个皇后,第一个解决方案是好的(更有效)。第二个更好,如果你可以扩展它来处理多个放置的初始皇后。