c++汉诺塔问题
c++解决汉诺塔问题
题目描述
约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到中间的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。
这是一个著名的问题,几乎所有的教材上都有这个问题。由于条件是一次只能移动一个盘,且不允许大盘放在小盘上面,所以64个盘的移动次数是:18,446,744,073,709,551,615
这是一个天文数字,若每一微秒可能计算(并不输出)一次移动,那么也需要几乎一百万年。我们仅能找出问题的解决方法并解决较小N值时的汉诺塔,但很难用计算机解决64层的汉诺塔。
假定圆盘从小到大编号为1, 2, …
输入
输入为一个整数n后面跟三个字符A B C。
整数为盘子的数目,后三个字符表示三个杆子的编号。
A是初始时n个盘子所在的杆子,C是目标杆子。
样例输入
3 A B C
样例输出
move 1 from A to C move 2 from A to B move 1 from C to B move 3 from A to C move 1 from B to A move 2 from B to C move 1 from A to C
提示
(None)
代码+注释
#include <bits/stdc++.h> using namespace std; int n = 0; void mov(int n,char a,char c,char b) { if (n == 0)//如果盘子数为0就推出 { return ; } else { mov(n - 1,a,b,c);//把a盘移到b盘,中间借助c盘 cout << "move " << n << " from " << a << " to " << c << endl;//把大的一块放过去就cout mov(n - 1,b,c,a);//把b盘移到c盘,中间借助a盘 } } int main() { char x,y,z; cin >> n >> x >> y >> z;// n = 3 x = A y = B z = C 3 A B C mov(n,x,z,y); return 0; }
原文地址:https://www.cnblogs.com/LJA001162/p/11032239.html
相关推荐
-
游戏AI—行为树研究及实现 c/c++
2019-3-28
-
面向对象与设计模式 c/c++
2019-3-30
-
关于const用法的学习 c/c++
2019-6-30
-
C++ Primer注解 – const限定符和指针 c/c++
2020-6-15
-
带码农看论文:MapReduce: Simplefied Data Processing on Large Clusters c/c++
2019-3-29
-
单向链表反转,就地逆置与递归反转(无表头结点) c/c++
2019-9-8
-
【数据结构】41_KMP字串查找算法 c/c++
2020-6-15
-
指针数组 c/c++
2019-9-11
-
稀疏矩阵的转置运算 c/c++
2019-6-30
-
比较C/C++和Delphi中的字符串和字符数组(数组和动态分配内存的情况) c/c++
2019-4-1