我正试图解决一个关于N皇后问题的变化 . 我的问题有点不同:

我给了一个板尺寸MxN和k'皇后的部分解决方案 . 最终目标是将k个皇后放在棋盘上,而没有任何一个威胁对方 . 虽然板上还有墙,允许在同一行,列或对角线上放置多个皇后 . 董事会说:

* * Q * * * *
Q * X * Q * X
* * Q * X * *
* * * X * * *
X * X * * * *

该函数将得到这个板,一行和一列,这已经是k'皇后的解决方案,k'是当前的皇后数,k是最终的皇后数 . 假设您不能为给定行上方的行添加任何更多的皇后:我的函数应该尝试添加皇后,直到从“col 1”列到该行的末尾以及“row”的任何其他行的行上的k为止1“到任何一栏的董事会结尾 .

所以对于给定的例子,部分解决方案适用于3x5板,我只允许添加皇后:((2,5~6)&(3~4,0~6))

我的代码如下:

private static boolean kQueens(int[][] board, int k, int row, int col, int numOfQueens){

        if(numOfQueens >= k) return true;

        //trying to place a queen in the row at the col+1 ~ row length position.
        // if possible place it and try to place a new one in the next position.
        for (int j = col+1 ; j < board[row].length ; j++ ) {
            if (addQueen(board, row, j)) {
                board[row][j] = QUEEN;
            }
            if(kQueens(board, k, row , j , numOfQueens+1))
        }

    return false;//replace with relevant return statement
}

addQueen是一个函数,它检查是否可以在给定位置添加一个女王,并且仍然有一个部分解决方案(即没有皇后受到威胁)任何关于如何从第一行移动到下一行的想法仍然保持递归解决方案?

**皇后由常数QUEEN = 1表示,墙由WALL = -1表示,空表示EMPTY = 0