汉诺塔

  有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要求把所有盘子一个一个移动到柱子C上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方。

定义函数

  void fun(盘数, 始发位置, 中间位置, 到达位置);

  void fun(int n,char a,char b,char c);

如果n=1,则直接从A移到C就可以了。

如果n>1,此时需要三个步骤:

  1) 把 A 的n-1个盘子从A 经C 移到B;

  2) 把 A 剩下的1个盘子移到 C;

  3) 把 B 的n-1个盘子从B 经A 移到C;

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void fun(int n,char a,char b,char c);
 5 
 6 void main(int argc, char* argv[])
 7 {
 8     fun(5,'A','B','C');
 9 }
10 
11 void fun(int n,char a, char b,char c)
12 {
13     if(n==1)
14         cout << a << "->" << c << '\t';
15     else
16     {
17         fun(n-1,a,c,b);
18         fun(1,a,b,c);
19         fun(n-1,b,a,c);
20     }
21 }

 

posted @ 2015-03-27 11:19  薛晓东  阅读(155)  评论(0编辑  收藏  举报