汉诺塔
2015-08-09 21:07
267 查看
/** 汉诺塔的研究 A,B,C,将A上的盘子移到C上,规则不再多说 经典的递归: 确立目标:A上的盘子移动到C上 问题分解:1, A--->B(借助于C将A的n-1个盘子移动到B上) 2, B--->C(借助于A将B的n-1个盘子移动到C上) 递归的边界:A上的最后一个直接放到C上 */ #include<stdio.h> ///目标:将n个盘子从x,借助y,移动到z void move(int n, char x, char y, char z) { if(n == 1)///递归边界:剩一个的时候直接放到 z 就可以了 这是对第n个盘子进行操作 { printf("%c--->%c\n",x,z); } else { /**该函数到达边界后并没有完成将A上的盘子移动到 B上,而是在回溯的过程中配合第二个递归调用才真正一步一步完成的 塔的移动,只是问题可以这么分解,这是难点,很难理解,很难拿来使用 */ move(n-1, x, z, y); ///问题分解1:将n-1个盘子从x借助z移动到y printf("%c--->%c %d\n",x,z,n); ///将第n个盘子从x移动到z上 move(n-1, y, x, z); ///问题分解2:将n-1个盘子从y借助x移动到z } } int main() { int n; scanf("%d",&n); move(n, 'x', 'y', 'z'); return 0; }
相关文章推荐
- 华为OJ(四)
- 【GDOI 2013模拟】Processer
- 周赛一 HDU 4727
- 编程之美----2.20 程序理解和时间分析
- 剑指offer_面试题14_调整数组顺序使奇数位于偶数前面(函数指针用法)
- LeetCode(143) Reorder List
- js获取Url后的数据转换为json
- C#根据身份证号码,计算生日、年龄、性别
- [SDOI2011][BZOJ2286] 消耗战|虚树|树型dp|树上倍增LCA
- 欧拉工程第58题:Spiral primes
- unity3d碰撞检测之立方体碰撞算法
- mongodb3.0.5的用户权限认证和使用可视化工具登录的一系列问题
- 华为OJ(输出数组最小k个数)
- UVA - 10132 File Fragmentation
- 指数型母函数理解
- Tian Ji -- The Horse Racing
- uva11992-Fast Matrix Operations(区间增值、改值)
- 107. Binary Tree Level Order Traversal II
- Majority Element:主元素
- 欧拉工程第57题:Square root convergents