题目描述

设有n个大小不等的中空圆盘,按从小到大的顺序从1到n编号。将这n个圆盘任意的迭套在三根立柱上,立柱的编号分别为A、B、C,这个状态称为初始状态。

现在要求找到一种步数最少的移动方案,使得从初始状态转变为目标状态。

移动时有如下要求:

·一次只能移一个盘;

·不允许把大盘移到小盘上面。

输入输出格式

输入格式:
文件第一行是状态中圆盘总数;

第二到第四行分别是初始状态中A、B、C柱上圆盘的个数和从上到下每个圆盘的编号;

第五到第七行分别是目标状态中A、B、C柱上圆盘的个数和从上到下每个圆盘的编号。

输出格式:
每行一步移动方案,格式为:move I from P to Q

最后一行输出最少的步数。

输入输出样例

输入样例#1:
5
3 3 2 1
2 5 4
0
1 2
3 5 4 3
1 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
说明

圆盘总数≤45

题解

首先要将第n个盘子从x到y
那么就要把比n小的盘子全部移到6-x-y
然后将n移到y

代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[101],b[101],n;
long long ans;
void dfs(int x,int dep)
{if (a[x]==dep) return;for (int i=x-1;i>=1;i--) dfs(i,6-dep-a[x]);printf("move %d from %c to %c\n",x,a[x]+64,dep+64);a[x]=dep;ans++;
}
int main()
{int x,d;cin>>n;cin>>x;for (int i=1;i<=x;i++){scanf("%d",&d);a[d]=1;}cin>>x;for (int i=1;i<=x;i++){scanf("%d",&d);a[d]=2;}cin>>x;for (int i=1;i<=x;i++){scanf("%d",&d);a[d]=3;}cin>>x;for (int i=1;i<=x;i++){scanf("%d",&d);b[d]=1;}cin>>x;for (int i=1;i<=x;i++){scanf("%d",&d);b[d]=2;}cin>>x;for (int i=1;i<=x;i++){   scanf("%d",&d);b[d]=3;}for (int i=n;i>=1;i--) dfs(i,b[i]);cout<<ans;
}

转载于:https://www.cnblogs.com/Comfortable/p/8412218.html

[dfs] 洛谷 P1242 新汉诺塔相关推荐

  1. 洛谷 P1242 新汉诺塔

    原题链接 题目描述 设有n个大小不等的中空圆盘,按从小到大的顺序从1到n编号.将这n个圆盘任意的迭套在三根立柱上,立柱的编号分别为A.B.C,这个状态称为初始状态. 现在要求找到一种步数最少的移动方案 ...

  2. P1242 新汉诺塔

    题目描述 设有n个大小不等的中空圆盘,按从小到大的顺序从1到n编号.将这n个圆盘任意的迭套在三根立柱上,立柱的编号分别为A.B.C,这个状态称为初始状态. 现在要求找到一种步数最少的移动方案,使得从初 ...

  3. 新汉诺塔(洛谷P1242)含第11个数据的解决办法

    解析 应该从大到小一个个移,这样后面大盘就可以直接忽略,保证没有冗余操作,必定最优(如果先移动小的,后面移动大的时还要动小的) 对于第id个从当前位置到目标的移动有两种移动方案: 法1:把id-1个移 ...

  4. UVA 10795 新汉诺塔问题

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. 汉诺塔(河内之塔)相关题目

    1. 标准汉诺塔 题目: 汉诺塔由三根柱子(分别用A.B.C表示)和n个大小互不相同的空心盘子组成.一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体. 对汉诺塔的一次合法的 ...

  6. 汉诺塔的递归实现,看完就懂了

    对于要实现汉诺塔递归程序的同学,我相信有一部分同学还没有真正的玩过汉诺塔这个游戏,我建议先在手机应用商店下载一个汉诺塔游戏去感受一下,当了解了游戏的玩法之后,也更方便你去理解递归代码的逻辑. 下面通过 ...

  7. python面向过程实践汉诺塔_递归汉诺塔-和递归汉诺塔相关的内容-阿里云开发者社区...

    多柱汉诺塔最优算法设计探究 多柱汉诺塔最优算法设计探究 引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因 ...

  8. 汉诺塔的非递归实现(借助堆栈模拟递归)

    汉诺塔的非递归实现 借助堆栈以非递归(循环)方式求解汉诺塔的问题(n,a,b,c).即将n个盘子从起始柱(标记为"a")通过借助柱(标记为"b")移动到目标杜( ...

  9. 题目---汉诺塔及AI代码及八皇后

    2019春第十一周作业 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering ...

最新文章

  1. 员工拒绝加班,被判赔公司1.8万!网友炸锅
  2. js数组的sort排序的原理和应用
  3. 【数据结构总结】第三章:栈和队列(线性结构)
  4. 前端学习(2997):vue+element今日头条管理--编码规范说明
  5. Numpy基础知识点汇总
  6. mysql week统计_MySQL按周统计 WEEK 实例
  7. mysql innodb 写锁_MySQL-InnoDB-锁
  8. mysql+8.0+新特性_MySQL 8.0备受瞩目的新特性大放送!
  9. jQueryQQ音乐动态轮播图
  10. mysql弱口令msf_Metasploit扫描Mysql弱口令
  11. java项目没有xml,利用eclipse新建的java web项目没有部署描述符web.xml文件怎么办?...
  12. c语言程序设计自考真题,自学考试《C语言程序设计》随堂试题及答案
  13. Archlinux 在启动时出现Error file vmlinuz not found解决方法
  14. 3D建模都用哪些软件?
  15. 你真的了解活跃用户吗?
  16. CBAM、通道注意力、空间注意力学习
  17. [LLVM]LLVM入门 ---llvm 代码结构
  18. 查看服务器的ip地址
  19. 【Chrome 调试技巧】教你一步不用安装插件就可以完成--电脑页面截图
  20. 你应该如何学习一个未知的技术领域?- 菜鸟小白篇

热门文章

  1. matlab 人脸识别_MATLAB基于PCALDA模糊神经网络的人脸识别
  2. docker 开启服务
  3. 图解TCPOP-SMTP
  4. 在虚拟宿主环境中承载 Active Directory 域控制器时需要考虑的事项
  5. FastDFS(提升磁盘IO性能的几个技巧 FastDFS 5.04之IO读事件)
  6. redhat6与7版本进入单用户模式修改root账户密码
  7. Windows学习总结(16)——Windows注册表入门详解
  8. Mysql学习总结(44)——Linux下如何实现mysql数据库每天自动备份定时备份
  9. python并列语句_Python基础_控制语句
  10. java 后台跳出提示_小猿圈Java初学者练习小案例:猜数字游戏