[dfs] 洛谷 P1242 新汉诺塔
题目描述
设有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 新汉诺塔相关推荐
- 洛谷 P1242 新汉诺塔
原题链接 题目描述 设有n个大小不等的中空圆盘,按从小到大的顺序从1到n编号.将这n个圆盘任意的迭套在三根立柱上,立柱的编号分别为A.B.C,这个状态称为初始状态. 现在要求找到一种步数最少的移动方案 ...
- P1242 新汉诺塔
题目描述 设有n个大小不等的中空圆盘,按从小到大的顺序从1到n编号.将这n个圆盘任意的迭套在三根立柱上,立柱的编号分别为A.B.C,这个状态称为初始状态. 现在要求找到一种步数最少的移动方案,使得从初 ...
- 新汉诺塔(洛谷P1242)含第11个数据的解决办法
解析 应该从大到小一个个移,这样后面大盘就可以直接忽略,保证没有冗余操作,必定最优(如果先移动小的,后面移动大的时还要动小的) 对于第id个从当前位置到目标的移动有两种移动方案: 法1:把id-1个移 ...
- UVA 10795 新汉诺塔问题
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 汉诺塔(河内之塔)相关题目
1. 标准汉诺塔 题目: 汉诺塔由三根柱子(分别用A.B.C表示)和n个大小互不相同的空心盘子组成.一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体. 对汉诺塔的一次合法的 ...
- 汉诺塔的递归实现,看完就懂了
对于要实现汉诺塔递归程序的同学,我相信有一部分同学还没有真正的玩过汉诺塔这个游戏,我建议先在手机应用商店下载一个汉诺塔游戏去感受一下,当了解了游戏的玩法之后,也更方便你去理解递归代码的逻辑. 下面通过 ...
- python面向过程实践汉诺塔_递归汉诺塔-和递归汉诺塔相关的内容-阿里云开发者社区...
多柱汉诺塔最优算法设计探究 多柱汉诺塔最优算法设计探究 引言 汉诺塔算法一直是算法设计科目的最具代表性的研究问题,本文关注于如何设计多柱汉诺塔最优算法的探究.最简单的汉诺塔是三个柱子(A.B.C),因 ...
- 汉诺塔的非递归实现(借助堆栈模拟递归)
汉诺塔的非递归实现 借助堆栈以非递归(循环)方式求解汉诺塔的问题(n,a,b,c).即将n个盘子从起始柱(标记为"a")通过借助柱(标记为"b")移动到目标杜( ...
- 题目---汉诺塔及AI代码及八皇后
2019春第十一周作业 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/software-engineering ...
最新文章
- 员工拒绝加班,被判赔公司1.8万!网友炸锅
- js数组的sort排序的原理和应用
- 【数据结构总结】第三章:栈和队列(线性结构)
- 前端学习(2997):vue+element今日头条管理--编码规范说明
- Numpy基础知识点汇总
- mysql week统计_MySQL按周统计 WEEK 实例
- mysql innodb 写锁_MySQL-InnoDB-锁
- mysql+8.0+新特性_MySQL 8.0备受瞩目的新特性大放送!
- jQueryQQ音乐动态轮播图
- mysql弱口令msf_Metasploit扫描Mysql弱口令
- java项目没有xml,利用eclipse新建的java web项目没有部署描述符web.xml文件怎么办?...
- c语言程序设计自考真题,自学考试《C语言程序设计》随堂试题及答案
- Archlinux 在启动时出现Error file vmlinuz not found解决方法
- 3D建模都用哪些软件?
- 你真的了解活跃用户吗?
- CBAM、通道注意力、空间注意力学习
- [LLVM]LLVM入门 ---llvm 代码结构
- 查看服务器的ip地址
- 【Chrome 调试技巧】教你一步不用安装插件就可以完成--电脑页面截图
- 你应该如何学习一个未知的技术领域?- 菜鸟小白篇
热门文章
- matlab 人脸识别_MATLAB基于PCALDA模糊神经网络的人脸识别
- docker 开启服务
- 图解TCPOP-SMTP
- 在虚拟宿主环境中承载 Active Directory 域控制器时需要考虑的事项
- FastDFS(提升磁盘IO性能的几个技巧 FastDFS 5.04之IO读事件)
- redhat6与7版本进入单用户模式修改root账户密码
- Windows学习总结(16)——Windows注册表入门详解
- Mysql学习总结(44)——Linux下如何实现mysql数据库每天自动备份定时备份
- python并列语句_Python基础_控制语句
- java 后台跳出提示_小猿圈Java初学者练习小案例:猜数字游戏