代码框架

  1. // version 1
  2. // Typical backtracking procedure
  3. void recursion(state s)
  4. {
  5. if( base(s) )
  6. return ;
  7. for each substate ss
  8. mark ss
  9. recursion (ss)
  10. unmark ss
  11. }
  12. // version 2
  13. int ans = 最坏情况, now; // now为当前答案
  14. void dfs(传入数值) {
  15. if (到达目的地) ans = 从当前解与已有解中选最优;
  16. for (遍历所有可能性)
  17. if (可行) {
  18. 进行操作;
  19. dfs(缩小规模);
  20. 撤回操作;
  21. }
  22. }
  23. // version 3
  24. * Backtracking(state)
  25. * if invalid(state) //e.g. we reached a # or the location is already visited
  26. * return
  27. *
  28. * if found_solution(state)
  29. * mark_solution_found
  30. * return
  31. *
  32. * for each child_state of state
  33. * state' = do changes in state
  34. *
  35. * Backtracking(state')
  36. *
  37. * state = undo changes in state'