首页 > 代码库 > 汉诺塔(河内塔)问题:
汉诺塔(河内塔)问题:
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘,如图所示:
现在请试着编写一个程序,对于一个有n个盘子的汉诺塔,列举将这n个盘子从柱子A移动到柱子C需要的所有移动步骤,每个步骤占一行。
输入:
3
输出:
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
1 #include "stdafx.h" 2 #include <iostream> 3 using namespace std; 4 5 void move(char src, char dest) 6 { 7 cout << src << "-->" << dest << endl; 8 } 9 10 //把n个盘子从src针移动到dest针,以medium为中介 11 void hanoi(int n, char src, char medium, char dest) 12 { 13 if (n == 1) 14 move(src, dest); //当盘子个数为1时候,直接从A移动到C 15 else 16 //把问题简单化, 17 //1.首先把A上的n-1个盘子移动到B 18 //2.把A的剩下的一个盘子移动到C 19 //3.把B上的n-1个盘子移动到C 20 { 21 hanoi(n - 1, src, dest, medium); //1.首先把A上的n-1个盘子移动到B 22 move(src, dest); //2.把A的剩下的一个盘子移动到C 23 hanoi(n - 1, medium, src, dest); //3.把B上的n-1个盘子移动到C 24 } 25 } 26 27 int main() 28 { 29 int m; 30 cout << "Enter the number of diskes:"; 31 cin >> m; 32 cout << "the step to moving:\t" << m << " diskes:" << endl; 33 hanoi(m, ‘A‘, ‘B‘, ‘C‘); 34 return 0; 35 }
汉诺塔(河内塔)问题:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。