终于又是周末了,我好开心呀!直接开始创作。
这几天的涨粉又开始加速了,希望能多保持一会:)
好的,废话不多说,直接开始今天的文章:
#include <iostream>
using namespace std;
void hanoi(int n, char from, char to, char auxiliary) {
if (n == 1) {
cout << "Move disc " << n << " from " << from << " to " << to << endl;
} else {
hanoi(n - 1, from, auxiliary, to);
cout << "Move disc " << n << " from " << from << " to " << to << endl;
hanoi(n - 1, auxiliary, to, from);
}
}
int main() {
int n;
cout << "Enter number of discs: ";
cin >> n;
hanoi(n, 'A', 'C', 'B');
return 0;
}
这里使用了递归算法,将汉诺塔问题拆分成了子问题。hanoi(n, A, C, B)的意思是将n个盘子从A柱移动到C柱,借助B柱。
当n等于1时,直接将盘子从from移动到to。否则,先将n-1个盘子从from移动到auxiliary,再将第n个盘子从from移动到to,最后将n-1个盘子从auxiliary移动到to。