2016-09-07 4 views
-4

파이썬에서 N-Queens 문제를 구현하려고합니다. 여왕의 위치가 주어진다면 보드의 다른 여왕이 대각선에 있는지 없는지 확인하기 위해 알고리즘을 설계하는 데 작은 도움이 필요합니다.N queens 알고리즘에서 대각선 검사 알고리즘

나는 보드가 N * N 행렬의 배열 인 곳에 diagonal_check(board, row, col)을 디자인하려고합니다. 여기서 '1'은 여왕의 존재를 나타내고 '0'은 부재를 나타냅니다. 여왕의 배열과 위치 (행, 열)를 함수에 전달합니다. 내 함수는 대각선에 다른 여왕이 있으면 true를 반환하고 그렇지 않으면 false를 반환해야합니다.

누군가가 diagonal_check 알고리즘의 기능을 도와 줄 수 있다면. 특정 언어 코드를 찾고 있지 않습니다.

+1

가능한 복제 (http://stackoverflow.com/questions/19998153/algorithm-of-n-queens) 파이썬 N 퀸 문제 (HTTP의 가능한 복제 –

+4

: //stackoverflow.com/questions/4818201/n-queen-problem-in-python) – TimeToCode

답변

0

는 왼쪽 상단 모서리가하자 (0,0)

광장 (행 안부)에 대한 대각선 방향 아래쪽 오른쪽은 col-row+7

사각형에 대한 대각선 방향 위쪽 오른쪽을 (행입니다 , col)은 row+col

col-row+7 또는 row+col이 동일한 대각선에 있는지를 알려주는 경우에만 확인하십시오. 그래도 조금 혼란 스럽다면 Google에 체스 판 이미지를 올려보세요. [N 퀸의 알고리즘]의

0
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; 
} 
관련 문제