UVA 254 Towers of Hanoi
UVA_254
一开始看错题目了,没有按照题目的要求去做,按题目中描述的算法去做的话,在n为偶数时和我们平常移动的结果是一样的,而当n为奇数的时候,最后会把所有的盘子移到中间的柱子上,实际上就是相当于调换的中间和最后柱子而已。
在找状态的时候可以用递归来处理,我们首先指定盘子堆的初始柱子s,和该堆最下面盘子所期望移动到的柱子t,从最大的盘子找起,分情况讨论最大的盘子能否移动,然后改变相应的状态继续递归即可。
import java.math.BigInteger;import java.util.Scanner; public class Main {public static int[] a = new int[5];public static BigInteger[] d = new BigInteger[110];public static void main(String[] args) { Scanner cin = new Scanner(System.in);int n; BigInteger m; d[0] = new BigInteger("1");for(int i = 1; i <= 100; i ++) d[i] = d[i - 1].multiply(BigInteger.valueOf(2));while(cin.hasNext()) { n = cin.nextInt(); m = cin.nextBigInteger();if(n == 0)break;for(int i = 0; i < 3; i ++) a[i] = 0; dfs(0, 2, n, m);if(n % 2 == 0) System.out.println(a[0] + " " + a[1] + " " + a[2]);else System.out.println(a[0] + " " + a[2] + " " + a[1]); } }public static void dfs(int s, int t, int n, BigInteger m) {if(n == 1) {if(m.equals(BigInteger.ZERO)) a[s] ++;else a[t] ++;return ; }int k = 0; {int[] x = new int[3]; x[s] = 1; x[t] = 1;for(int i = 0; i < 3; i ++)if(x[i] == 0) k = i; }if(m.compareTo(d[n - 1]) != -1) { ++ a[t]; m = m.add(d[n - 1].negate()); dfs(k, t, n - 1, m); }else { ++ a[s]; dfs(s, k, n - 1, m); } }}
转载于:https://www.cnblogs.com/staginner/archive/2011/12/19/2293900.html
UVA 254 Towers of Hanoi相关推荐
- Strange Towers of Hanoi (POJ1958)
Strange Towers of Hanoi (POJ1958) n个盘子4座塔的Hanoi问题至少需要多少步?(1<=n<=12) 分析: n盘3塔: \(d[n] = 2*d[n-1 ...
- poj 1958 Strange Towers of Hanoi
2019独角兽企业重金招聘Python工程师标准>>> Strange Towers of Hanoi Time Limit: 1000MS Memory Limit: 30000K ...
- POJ1958 Strange Towers of Hanoi [递推]
题目传送门 Strange Towers of Hanoi Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3117 Ac ...
- UVA254 Towers of Hanoi【DFS】
In 1883, Edouard Lucas invented, or perhaps reinvented, one of the most popular puzzles of all times ...
- Strange Towers of Hanoi 汉诺塔问题及其升级(递推)四个汉诺塔问题
今天学习递推的汉诺塔问题,非常的有趣 文章目录 1.汉诺塔问题来源 分析 2.Strange Towers of Hanoi[DP][递推] 题目大意: 思考 解题步骤: 1.汉诺塔问题来源 汉诺塔( ...
- WeChall Towers of Hanoi (Java, Crac... 答案
还没开始学Java,先贴下别人的答案,省得以后找不到. Towers of Hanoi - 我怎么能不努力奋斗 - 博客园
- 汉诺塔问题(Towers of Hanoi)
汉诺塔问题的思维方式很重要,正向和逆向都很容易绕晕,要从中间开始展开 显而易见,如图所示的情况是移动过程中必须的一步,而问题就可以分解为前半部分:如何将k-1个盘子从A->B及后半部分:如何将k ...
- java hanoi_JAVA:New towers of Hanoi
全部程序实现: package ch2.divide; public class NewHanoi { public static int count = 0; // /这个地方的用途就是找到A杆顶端 ...
- HT for Web 3D游戏设计设计--汉诺塔(Towers of Hanoi)
在这里我们将构造一个基于HT for Web的HTML5+JavaScript来实现汉诺塔游戏. 汉诺塔的游戏规则及递归算法分析请参考http://en.wikipedia.org/wiki/Towe ...
- POJ - 1958 Strange Towers of Hanoi(线性dp)
题目链接:点击查看 题目大意:继承经典的n个盘子三座塔的汉诺塔问题,现在问对于n个盘子四座塔的升级版汉诺塔问题,对于n=1~12的答案分别是多少 题目分析:首先分析三座塔的情况,对于第n个盘子而言,我 ...
最新文章
- vs2005 Key not valid for use in specified state
- 连接黑屏_连接百度Carlife后,MMI黑屏了?
- 为什么谐振时电抗为0_变频串联谐振试验装置的接线原理
- LBS推荐系统的设计方法
- Mysql京东的一道面试题目 比较综合
- 【拔刀吧少年】之Expect 自动化控制和测试 Here Document 免交互
- 把1,2,3…n*n 的数字按照顺时针螺旋的形式填入数字矩阵
- [NLP]OpenNLP Maven工程的依赖
- EUV光刻!宇宙最强DDR4内存造出
- 学好mysql数据库能找到什么工作_MySQL数据库学习路线汇总整理全集(附详细的学习路线介绍图)...
- 项目管理的五大过程组及十大知识领域
- Fisher精确检验的通俗理解
- [Machine Learning]--PMI(Pointwise Mutual Information)
- linux下通过关键字查询日志并定位
- 【粉丝福利】第二波 | 当当购书狂欢,满 400 减 230!下单充电速来!
- 算法设计与分析第一次作业 1301. Bubbling Bubbles
- 为什么美团股价大跌:疫情影响、阿里竞争与模式弊病
- [Design]国粹京剧 脸谱表情 值得收藏
- 为什么使用计算机网络连接,为什么无线网络连接上却不能上网,教您电脑连上无线网却不能上网怎么办...
- Brpc 服务端收包源码分析(一)
热门文章
- 用了几年的 Fastjson,我最终替换成了Jackson!
- 一直都说字节跳动有点难,这次体会了,而且被怼了~
- 微服务架构是啥?一个故事告诉你!
- Azure 宕机 3 个小时:因人为配置 DNS 失误
- 阿里巴巴:如何从优秀员工,晋升为合格管理者?
- 【名额有限】腾讯技术工程-运维技术沙龙
- mysql 打印_揭秘MySQL 主从环境中大事务的传奇事迹
- 分布式消息系列:详解RocketMQ的简介与演进、架构设计、关键特性与应用场景
- 【WEB基础】HTML CSS 基础入门(2)选取工具:VS2019安装使用
- python中的exec()、eval()以及complie()