题目名称 | 1148. 新汉诺塔 |
---|---|
输入输出 | hano.in/out |
难度等级 | ★★ |
时间限制 | 1000 ms (1 s) |
内存限制 | 128 MiB |
测试数据 | 10 |
题目来源 | 王者自由 于2012-10-15加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:13, 提交:22, 通过率:59.09% | ||||
合金装备布狼牙 | 100 | 0.000 s | 0.00 MiB | C++ |
AAAAAAAAAA | 100 | 0.000 s | 0.03 MiB | C++ |
FreeDr | 100 | 0.007 s | 0.31 MiB | C++ |
名字要他有毛用 | 100 | 0.010 s | 0.29 MiB | C |
合金装备布狼牙 | 100 | 0.010 s | 0.29 MiB | C++ |
王者自由 | 100 | 0.034 s | 0.29 MiB | C++ |
zhengtn03 | 100 | 0.035 s | 0.22 MiB | C++ |
NVIDIA | 100 | 0.036 s | 0.29 MiB | C++ |
s先生b先生sb先生无关风度 | 100 | 0.044 s | 0.16 MiB | Pascal |
Arrow | 100 | 0.045 s | 0.31 MiB | C++ |
关于 新汉诺塔 的近10条评论(全部评论) | ||||
---|---|---|---|---|
数据范围?
AAAAAAAAAA
2017-06-21 21:09
2楼
| ||||
毛线啊什么输出,坑比还是被改成了printf,王者自由的方法还是相当方便。
printf("move %d from %c to %c\n", k, s[k] + 'A'-1, u + 'A'-1) 下面是我自己的算法比较坑时间。 move(int n,int x,int y,int z) { if (n==1) printf("%c-->%c\n",x,z); else { move(n-1,x,z,y); printf("%c-->%c\n",x,z); move(n-1,y,x,z); }
NVIDIA
2015-07-10 10:45
1楼
|
设有n个大小不等的中空圆盘,按从小到大的顺序从1到n编号。将这n个圆盘任意的迭套在三根立柱上,立柱的编号分别为A、B、C,这个状态称为初始状态。
现在要求找到一种步数最少的移动方案,使得从初始状态转变为目标状态。
移动时有如下要求:
·一次只能移一个盘;
·不允许把大盘移到小盘上面。
文件第一行是状态中圆盘总数;
第二到第四行分别是初始状态中A、B、C柱上圆盘的个数和从上到下每个圆盘的编号;
第五到第七行分别是目标状态中A、B、C柱上圆盘的个数和从上到下每个圆盘的编号。
每行一步移动方案,格式为:move I from P to Q
最后一行输出最少的步数。
5 3 3 2 1 2 5 4 0 1 2 3 5 4 3 1 1
move 1 from A to B move 2 from A to C move 1 from B to C move 3 from A to B move 1 from C to B move 2 from C to A move 1 from B to C 7