N * N 체스 판에서 N개의 Queen을 서로 같은 행, 열, 대각선 위에 오지 않도록 배치.
K행에 배치된 Queen의 열 번호를 $x_k$라고 하면 결국 $(x_1, x_2, ..., x_n)$을 찾는 것과 동일
x[k]
는 k번째 행에 놓일 퀸의 열 번호를 의미B
는 (k, x[k])
에 이미 놓인 (k-1)
개와 조건을 만족하는지 점검하는 함수로 정의
(k-1)
행까지 놓인 Queens과 충돌이 없어야 함# pseudo code
def NQueens(k): # x[k]를 결정
if k >= N: return # 모든 x[k]가 결정 됨.
for col in range(N):
if queen can place at (k,c): # x[k]에 놓을 수 있는가? -> 한계함수
x[k] = c
NQueens(k + 1)
1) N개의 퀸을 배치해야하므로 무조건 모든 행에 퀸이 들어가야한다.
2) 따라서 0열부터 N-1열까지 퀸을 놓는 방법을 for문을 통해 돌린다.
3) 유망한지(이전의 열로 인해 영향을 받는지) 검사하는 함수를 통해 유망함수만을 걸러준다.