2017-05-20 4 views
0

나는 내 코드의 일부분을 가지고 있는데, 나는 그들이 서로 공격하지 않도록 여왕 배치의 행, 열 및 대각선을 검사하는 함수를 작성했습니다. 현재 내가 대각선 기능에 문제가있어 : 여왕 떨어져 있지만하지 않을 때의 경우 두 개 이상의 하나 개의 길이 때nqueen에서 대각선 방향으로 확인하기

def checkDiagonal(T): 
for i in range(len(T) - 1): 
    if abs(T[i] - T[i + 1]) == 1: 
     return False 
return True 

이 기능의 문제점은 그것이 단지 생각하는 것입니다.

예, N = 7이 인쇄되면 :

Enter the value of N: 7 
0 Q 0 0 0 0 0 
0 0 0 0 0 0 0 
0 0 X 0 0 0 0 
0 0 X 0 0 0 0 
0 0 X 0 0 0 0 
0 0 X 0 0 0 0 
Q 0 0 0 0 0 0 

출력에서 ​​Q는 I 코드에 설정된 부분적인 해결책이다. X는 여왕을위한 다음 가능한 위치이지만, 출력에서 ​​여왕에게 분명히 대각선이며 공격받을 X가 하나 있습니다. 경우에만> 우측 경우 대각선 -

부분적인 해결책리스트 = [6,0]를,이 경우는 T로 함수에 전달한다

+0

입력 매개 변수 'T'는 무엇입니까? – JohanL

+0

@JohanL 부분적인 솔루션 목록 [6,0] – Electric

+0

그리고 테스트 할 X 위치를 어떻게 알 수 있습니까? 아니면 모두 테스트 해 보시겠습니까? 그런 경우에'N'은 가지고있는 것이 좋을 것입니다. – JohanL

답변

0

두 점 (x1, y1)(x2, y2) 동일한 좌하 하나이다 y1 - x1 == y2 - x2. 정확하게 질문하는 것으로 이해하면 부분 솔루션 T = [0,6]은 부분 솔루션 [(0,0), (1,6)]을 나타냅니다. 따라서 0 - 0 = 0 != 5 == 6 - 1부터이 두 요소는 같은 대각선에 있지 않습니다.

그러나 부분 해답 [0 , 6, 2] = [(0,0), (1,6), (2,2)]에 대해 우리는 0 - 0 == 0 == 2 - 2을 가지므로 두 점은 같은 왼쪽 하단 -> 오른쪽 상단 대각선에있게됩니다.

왼쪽 위 -> 오른쪽 아래 대각선의 경우 비슷한 조건을 찾아야합니다. 알아낼 수 있어야하지만 찾지 못하면 알려주세요.

이 (에만이 대각선에 대한) 코드 같은 이어질 것

:

def checkDiagonal(T): 
    for i in xrange(len(T) - 1): 
     for j in xrange(i + 1, len(T)) 
      if ((T[i] - i == T[j] - j): 
       return false 
    return true 

내가이를 테스트 할 시간이 없었다, 그래서 작은 오류가있을 수도 있지만 조심하지만, 일반적인 생각이 맞아야합니다.