代码框架
// version 1// Typical backtracking procedurevoid recursion(state s){ if( base(s) ) return ; for each substate ss mark ss recursion (ss) unmark ss}// version 2int ans = 最坏情况, now; // now为当前答案void dfs(传入数值) { if (到达目的地) ans = 从当前解与已有解中选最优; for (遍历所有可能性) if (可行) { 进行操作; dfs(缩小规模); 撤回操作; }}// version 3 * Backtracking(state) * if invalid(state) //e.g. we reached a # or the location is already visited * return * * if found_solution(state) * mark_solution_found * return * * for each child_state of state * state' = do changes in state * * Backtracking(state') * * state = undo changes in state'