四柱汉诺塔
来源:互联网 发布:云警报警主机编程 编辑:程序博客网 时间:2024/06/16 06:15
问题;有a,b,c,d四根柱子,要求最小的步数求出把a上的n根汉诺塔移到d上
解法:
1. 先把a上的的n个盘子分成两部分:(n-k)和k个,上层为k个
2. 把a上层的k个用四柱汉诺塔的方法借助c,d移动到b上
3. 把a剩下的n-k个盘用三柱汉诺塔的方法经过c移动到d上
4. 把b上的k个汉诺塔借助四柱汉诺塔的方式经过a,c移动到d上
由此可见要算n个盘子的四柱汉诺塔的步数等于min(k个盘子的四柱汉诺塔的步数+ k个盘子的四柱汉诺塔的步数+(n-k)个盘子的三柱汉诺塔的步数);
边界条件当n=1时四柱汉诺塔的步数为1;n=2的时候为3
在三柱汉诺塔的时候,最小的步数为2的(n-k)次方减1
此题用动态规划可以做出来;
#include<iostream>#include<cstdio>#include<cmath>using namespace std;int main(){ int n; while(~scanf("%d",&n)){ long long Min; long long step[105]; int i,j; step[1]=1; step[2]=3; long long m; for(i=3;i<=n;i++){ Min=99999999999999999; for(j=1;j<i;j++){ m=2*step[j]+(long long)pow(2,i-j)-1; printf("%lld\n",m); if(Min>m) Min=m; } step[i]=Min; //printf("%d\n",Min); } printf("%lld\n",step[n]); } return 0;}
此程序的缺点:数字太大的时候保存不了
0 0
- 四柱汉诺塔
- 四柱汉诺塔
- 四柱汉诺塔
- 四柱汉诺塔
- 三、四柱汉诺塔问题
- uva 10254(四柱汉诺塔)
- hdu 1207 四柱汉诺塔
- hdu 1207 汉诺塔II (四柱汉诺塔)
- 三、四柱汉诺塔最小步数
- POJ_1958_Strange Towers of Hanoi(四柱汉诺塔)
- hdu1207 优化后的,四柱汉诺塔
- 递归 —— 三柱汉诺塔和四柱汉诺塔
- HDU 1207 汉诺塔II(四柱汉诺塔)
- 日常记录:《算法导论》学习笔记之四—快速排序
- Linux系统中挂载和使用光盘的基本步骤
- leetcode 113. Path Sum II 二叉树求符合和值为sum的链
- 对linux的进行和线程的一点认识
- Java源码解读——ArrayList(一)
- 四柱汉诺塔
- 自定义Dialog
- 第十二周实践立方累加和
- Sftp的命令问题
- 大数据风控具体是怎样的?
- 如何将unsigned char*(或BYTE*)图像数据封装成OpenCV中Mat类型
- aliyun阿里云 Maven仓库地址
- Python 安装mysql错误的一种解决办法
- console里旋转的寿司