汉诺塔问题
来源:互联网 发布:php工程师发展前景 编辑:程序博客网 时间:2024/05/16 05:48
一,移动次数的计算
现在有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,现在把所有盘子一个一个移动到柱子B上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动,设移动次数为H(n)。
首先我们肯定是把上面n-1个盘子移动到柱子C上,然后把最大的一块放在B上,最后把C上的所有盘子移动到B上,由此我们得出表达式:
H⑴ = 1
H(n) = 2*H(n-1)+1 (n>1)
那么我们很快就能得到H(n)的一般式:
H(n) = 2^n - 1 (n>0)
二,输出移动路径
思路:
把n-1个饼移到B,再把第n个饼移到C,最后把n-1个饼移到C。
#include <iostream>#include<cstdio>using namespace std;void move(int n, char a, char b){ printf("%c->%c\n",a,b);} void hanoi(int n, char a, char b, char c){ if(n > 0) { hanoi(n - 1, a, c, b); move(n, a, b); hanoi(n - 1, c, b, a); }}int main(){ int n; while(cin>>n){ char a='a',b='b',c='c'; hanoi(n,a,c,b); } return 0;}
0 0
- 汉诺塔问题 背包问题
- 递归问题,汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题.
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- 汉诺塔问题
- android找不到jar包
- C++知识点随笔(三):static、const、friend、inline
- iOS加速审核
- 从Drawable到BitmapDrawable的转换
- 取到easyui的tab下iframe方法
- 汉诺塔问题
- 图片预览插件 fancyBox
- iOS笔记-(清除模拟器运行产生的文件,为Mac腾出空间)
- Android 打飞机 小游戏 的实现 - 画面移动 对象封装 碰撞效果
- EasyUi 中datagrid 实现查询方法
- PHP中include和require的区别详解
- WebSocket详解
- Android Studio for Mac
- WinForm程序安装以后提示错误解决方法