巡回セールスマン問題(TSP):一連の都市と都市の各ペア間の距離が与えられた場合、各都市を1回訪問して開始都市に戻る最短ループを解きます。
1.アイデア
バックトラッキングアルゴリズムは、完全なトラバーサルを整理し、秩序正しく、合理的に実行することです。明らかに、TSPは一度に異なる都市を通過します。各都市を通過する順序を選択すると、ループの総距離に影響します。したがって、TSP問題の解空間は全体の配置なので、すべての点の配置をトラバースする必要があります。
状況をnポイントでソートするためにトラバースする必要があります。n-1回選択する必要があります。決定ツリーの非常に鮮やかな配置を作成できます。iであるツリーのi番目のレイヤー
ポジションの選択には(n-i + 1)の選択肢があるはずです。たとえば、次の例は、数値123のすべての順列をたどる決定木です。
第二に、擬似コードの実装
最初にすべての数値が順不同でx配列に格納されているとします。ディシジョンツリーのi番目のレベルは、i番目のレベルの選択です。i番目のレベルに移動するとき、1〜i-1桁の数が決定されている(x配列に格納されている)ため、i番目のレベルのみを選択できます。 x [i]〜x [n]。
これが実際に最小の問題のある剪定操作です。現在の値が記録された最小値よりも小さい場合のみ、次のレベルの検索に進みます。
backtrack(int t) { //搜索树的第t层:确定第 t 位的选择
if(t > n) {
//遍历的终点
return;
}
for i = t : n
change x[i] and x[t] //选则第 i个数为 第 t 位
if 满足限制条件和界限条件
backtrack(t + 1) //继续选择下一位
change x[i] and x[t] //换回来哦
}