올바른 선택을 계속하면 목표 상태(goal state)에 도달한다.
N!
가지의 경우의 수를 가진 문제에 대해 DFS로 탐색하면 당연히 처리 불가능한 문제.문제 해결 과정의 중간 상태를 각각 한 노드로 나타낸 트리
checknode (node v)
if promising(V)
if there is a solution at v
write the solution
else
for each child u of v
checknode(u)
bool backtrack(선택 집합, 선택한 수, 모든 선택수) {
if (선택한 수 == 모든 선택수) // 더 이상 탐색할 노드가 없다. {
찾는 솔루션인지 체크;
return 결과;
}
현재 선택한 상태 집합에 포함되지 않는 후보 선택들(노드) 생성
모든 후보 선택들에 대해 {
선택 집합에 하나의 후보선택을 추가
선택한 수 = 선택한 수 + 1
결과 = backtrack 호출(선택 집합, 선택한 수, 모든 선택수)
if (결과 == 성공)
return 성공; // 성공한 경우 상위로 전달
}
return 실패;
}