... 문제를 해결하기 위해 재귀 스택으로 돌아가서 다시 시작 한다는 개념에 대해 생각할 수없는 것 같습니다 .
역 추적에서 다시 시작하지 않습니다. 대신 현재 상황에서 모든 옵션을 반복합니다.
미로에 대한 해결책을 찾는 것에 대해 생각하십시오. 두 개의 다른 경로가있는 지점에서 왼쪽을 먼저 시도하십시오. 왼쪽이 출구로 연결되지 않으면 해당 지점으로 돌아가서 다른 경로를 시도하십시오. 이것이 역 추적의 작동 방식입니다. 역 추적을 사용할 수있는 8 Q 및 기타 문제에서 혼란스러운 부분은 문제 영역에 있습니다. 결정적 방식으로 주어진 상황에서 옵션을 반복하는 방법입니다.
편집 : 다음은 역 추적 이해를 돕는 의사 코드입니다.
# depending on the problem, backtracking is not necessarily calling the
# method itself directly. for now, let's just stick with the simple case.
def backtracking(state)
option_list = state.get_all_options
option_list.each {|option|
state.apply option
return resolved if state.is_resolved
return resolved if backtracking(state) == resolved
state.undo option
}
return not_resolved
end
8Q 질문 :
- state.get_all_options는 다음 여왕의 가능한 위치 목록을 반환합니다
- state.is_resolved는 모든 여왕이 보드에 있는지 그리고 서로 잘 지내는지를 테스트합니다.
- state.apply 및 state.undo는 위치를 적용하거나 취소하기 위해 보드를 수정합니다.