Hanoi 汉诺塔解法

一年前就看到的问题,始终搞不明白,在网上找了个答案抄了下就交了。最后发现还是得搞懂,在B站上找到一部关于汉诺塔问题的视频,讲的真的非常好!!!
懒猫老师-C语言-汉诺塔问题详解(hanoi)_哔哩哔哩_bilibili

/*hanoi(N, X, Y, Z)
	 个数 从 经由 到
	 hanoi(n-1,x,z,y); 先有n-1个盘子从x经过z移动到y
	 move(x,z);	//将最下面的盘子从x移动到z
	 hanoi(n-1,y,x,z);	然后将剩下的n-1个盘子从y经过x移动的z
*/
#include<stdio.h>
#include<iostream>

using namespace std;
void move(char, char);

//n个盘子,从x移动到z,用y作临时存放
void hanoi(int n, char x, char y, char z) {
	if (n == 1)
		move(x, z);
	else {
		hanoi(n - 1, x, z, y);
		move(x, z);
		hanoi(n - 1, y, x, z);
	}
}

//显示盘子移动轨迹
void move(char c1, char c2) {
	cout << c1 << " -> " << c2 << "\n";
}

int main() {
	int n;
	cout << "please input n:";
	cin >> n;
	hanoi(n, 'a', 'b', 'c');
}

posted @ 2021-11-14 14:47  颜骏  阅读(221)  评论(0编辑  收藏  举报