不要让昨天 占据你的今天 夏午晴天

夏午晴天

Hanoi

汉诺塔问题

时间限制: 1 Sec  内存限制: 128 MB

题目描述

汉诺(Hanoi)塔问题:古代有一个梵塔,塔内有三个座A、B、C,A座上有n个盘子,盘子大小不等,大的在下,小的在上(如图)。有一个和尚想把这n个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中,3个座上的盘子始终保持大盘在下,小盘在上。在移动过程中可以利用B座,要求打印移动的步骤。如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C。

输入

输入盘子个数n

输出

输出盘子最少移动的步骤

样例输入

3

样例输出

1:A->C
2:A->B
3:C->B
4:A->C
5:B->A
6:B->C
7:A->C

 1 #include <iostream>
 2 
 3 using namespace std;
 4 int count = 1;
 5 void Hanoi(int n, char a, char b, char c)
 6 {
 7     if(n == 1)
 8         cout << count++ << ":" << a << "->" << c << endl;
 9     else {
10         Hanoi(n-1,a,c,b);
11         cout << count++ << ":" << a << "->" << c << endl;
12         Hanoi(n-1,b,a,c);
13     }
14 }
15 
16 int main()
17 {
18     int n;
19     char a = 'A', b = 'B', c = 'C';
20     while(cin >> n)
21     {
22         Hanoi(n,a,b,c);
23     }
24     return 0;
25 }

 

posted on 2017-03-18 19:57  夏晴天  阅读(288)  评论(0编辑  收藏  举报

导航

Live2D