下面代码采用分治算法求解标准 3 柱汉诺塔问题,时间复杂度为 。
void move(vector<int> &src, vector<int> &tar) { int pan = src.back(); src.pop_back(); tar.push_back(pan);} void dfs(int n, vector<int> &src, vector<int> &buf, vector<int> &tar) { if (n == 1) { move(src, tar); return; } dfs(n - 1, src, tar, buf); move(src, tar); dfs(n - 1, buf, src, tar);} void solveHanota(vector<int> &A, vector<int> &B, vector<int> &C) { int n = A.size(); dfs(n, A, B, C);}