flowchart TD
A[Enter recursion frame] --> B{Goal reached}
B -- Yes --> C[Copy path to result]
B -- No --> D[Iterate candidates]
D --> E{Pruning condition}
E -- Yes --> F[Skip branch]
E -- No --> G[Choose candidate]
G --> H[Recurse deeper]
H --> I[Unchoose rollback]
I --> D
F --> D
sequenceDiagram
participant BT as backtrack
participant Path
participant Result
BT->>Path: choose
BT->>BT: recurse
BT->>Path: unchoose
alt solution found
BT->>Result: append copy path
end
# [Backtracking 템플릿: 아키텍트 버전]# Use Case: 모든 경우의 수 탐색, 조합, 순열# Components: Recursive DFS, Choice, Constraint# Constraint: 가지치기(Pruning)로 최적화defbacktrack_template(candidates,target):# 1. 초기화 (Initialization Layer)result=[]# 2. 백트래킹 함수 (Backtracking Function)defbacktrack(path,start,remaining):# 3. 종료 조건 (Base Case)ifremaining==0:result.append(path[:])# 복사 필수return# 4. 후보 탐색 (Candidate Exploration)foriinrange(start,len(candidates)):# 5. 가지치기 (Pruning)ifcandidates[i]>remaining:break# 정렬되어 있다면 조기 종료# 6. 선택 (Choose)path.append(candidates[i])# 7. 재귀 탐색 (Explore)backtrack(path,i,remaining-candidates[i])# 8. 복원 (Unchoose / Backtrack)path.pop()candidates.sort()# 가지치기 효율화backtrack([],0,target)returnresult