回溯算法:
就是搜索一棵状态树的过程,这个过程类似于DFS,但是在决定搜索下一步的时候先作一次判断。如果ok再继续下一步搜索,这里等于是进行一次启发式的剪枝。
一般会有这么一行:
backtrack(current_state) {
// blalala
for next_state in next_states(current_state)
if (possible(current_state, next_state))
backtrack(next_state);
// blalala
}