代码框架
// version 1
// Typical backtracking procedure
void recursion(state s)
{
if( base(s) )
return ;
for each substate ss
mark ss
recursion (ss)
unmark ss
}
// version 2
int 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'