汉诺塔的C++实现
#include "pch.h" #include <iostream> //#include <cmath> //#include <climits> using namespace std; int hanoi(int n, char src, char medium, char dest); void move(char src, char dest); int main() { int n; int a; cin >> n; a = hanoi(n, 'A', 'B', 'C'); cout << a; return 0; } int hanoi(int n, char src,char medium,char dest) { static int sum=0; sum++; if (n == 1) move(src, dest); else { hanoi(n - 1, src, dest, medium); move(src, dest); hanoi(n - 1, medium, src, dest); } return sum; } void move(char src, char dest) { cout << "move " << src << " to " << dest << endl; }
主要采用递归的思想,假设三个塔A,B,C。根据汉诺塔规则,需要将A转移至C,借助中间量C。对于一个n层汉诺塔,只需将n-1层移至B,将第n层移至C,此时再以A为中间量将当前B中的n-1层中的n-2层移至A,最后一层移至C,如此循环,即可将所有盘移至C,并按顺序放置。