一句话开场:
回溯法就是对隐式图的深度优先搜索
bool finished = FALSE; /* 是否获得全部解? */ backtrack(int a[], int k, data input) { int c[MAXCANDIDATES]; /*这次搜索的候选 */ int ncandidates; /* 候选数目 */ int i; /* counter */ if (is_a_solution(a,k,input)) process_solution(a,k,input); else { k = k+1; construct_candidates(a,k,input,c,&ncandidates); for (i=0; i<ncandidates; i++) { a[k] = c[i]; make_move(a,k,input); backtrack(a,k,input); unmake_move(a,k,input); if (finished) return; /* 如果符合终止条件就提前退出 */ } } }
待看了算法设计手册后来补充