Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python N皇后算法中的对角线检查算法_Python_Algorithm_Language Agnostic_N Queens - Fatal编程技术网

Python N皇后算法中的对角线检查算法

Python N皇后算法中的对角线检查算法,python,algorithm,language-agnostic,n-queens,Python,Algorithm,Language Agnostic,N Queens,我试图用python实现N-Queens问题。在设计算法时,我需要一些帮助,以检查是否给定了皇后的位置,并检查电路板上是否有其他皇后位于其对角线上 我正在尝试设计一个函数对角线检查(board,row,col)其中board是数组的N*N矩阵,其中“1”表示女王在场,“0”表示缺席。 我将把皇后的数组和位置(行、列)传递给函数。如果对角线上有任何其他皇后,则我的函数必须返回false,否则返回true 如果有人能帮助我使用对角线检查函数的算法。不查找任何特定的语言代码。让左上角为(0,0) 正方

我试图用python实现N-Queens问题。在设计算法时,我需要一些帮助,以检查是否给定了皇后的位置,并检查电路板上是否有其他皇后位于其对角线上

我正在尝试设计一个函数
对角线检查(board,row,col)
其中board是数组的N*N矩阵,其中“1”表示女王在场,“0”表示缺席。 我将把皇后的数组和位置(行、列)传递给函数。如果对角线上有任何其他皇后,则我的函数必须返回false,否则返回true


如果有人能帮助我使用
对角线检查
函数的算法。不查找任何特定的语言代码。

让左上角为(0,0)

正方形(行,列)的右下方向对角线为
col行+7

正方形(行,列)的右上方向对角线为
row+col

只需检查两个皇后是否具有相同的
col行+7
row+col
即可告诉您两个皇后是否位于同一对角线上。如果您仍然有点困惑,请在谷歌上查找棋盘图像。

可能的重复
boolean diagonalCheck(board, row, col) {

    int tempRow ;
    int tempCol ;

    //algorithm to check left diagonal
    if (row >= col) {
        tempRow = row-col;
        tempCol = 0;
    } else {
         tempRow = 0;
         tempCol = col-row;
    }

    while (tempRow != N-1 && tempCol != N-1) {
        if (tempRow == row && tempCol ==col ){
            //no need to check 
        } else if(queen(tempRow,tempCol) == 1 ) {
            return true;
        }
        tempRow++;
        tempCol++;
    }

    //algorithm to check right diagonal
    if (row + col >= N-1) {
        tempCol = N-1;
        tempRow = (row + col) -(N-1)
    } else {
        tempRow = 0;
        tempCol = row + col;
    }


    while (tempRow != N-1 && tempCol != 0) {
        if (tempRow == row && tempCol ==col ) {
            //no need to check 
        } else if(queen(tempRow,tempCol) == 1 ) {
          return true;
        }
        tempRow++;
        tempCol--;
    }
    return false;
}