상태공간트리를 깊이우선탐색으로 탐색!
유망함 : 방문 중인 노드에서 하위 노드가 해답을 발견할 가능성이 있음
망함 : 방문 중인 노드에서 하위 노드가 해답을 발견할 가능성이 없음
방문 노드가 유망한지 체크, 유망하지 않으면, 하위 트리를 가지치기함
가지치기한 상태 : 방문한 노드의 방문하지 않은 하위 트리 (pruned state)
ex)
def checknode(node) :
if (promising(node))
if (node에 해답이 있으면) :
해답을 출력
else :
for (node의 모든 자식 노드 snode에 대해서) :
checknode(snode)
https://www.acmicpc.net/problem/9663
유망의 조건
n = int(input())
ans = 0
row = [0] * n
def promising (x) :
for i in range(x) :
if row[x] == row[i] or abs(row[x] - row[i]) == abs(x-i) :
return False
return True
def n_queens (x) :
global ans
if x == n:
ans += 1
return
else :
for i in range(n) :
row[x] = i
if promising(x) :
n_queens(x+1)
n_queens(0)
print(ans)