sicily 1150. 简单魔板
水题一条,但可以通过此题学习宽搜或深搜,然后通过和1151的比较,学习搜索中剪枝的作用。
宽搜中可以在递归的一开始就先检测是否搜到目标值(如下面贴上来的代码),也可以在将候选节点入队时检查。但如果是在入队时检查的话记得要注意在初始节点入队时检查初始节点是否就已经是目标值。
一开始犯的错误就是红色字体标出的错误。因此自己写多几个测试用例测试自己的代码,全部测试用例如下:
4
5 8 7 6
4 1 2 3
3
8 7 6 5
1 2 3 4
0
1 2 3 4
8 7 6 5
1
1 7 2 4
8 6 3 5
2
1 6 7 4
8 3 2 5
1
1 6 7 4
8 3 2 5
-1
2 AB
1 A
0 // 边界测试
1 C // 边界测试
2 CC // 边界测试
以下为代码:
#include <iostream> #include <queue> using namespace std; struct Node{int a;string path; }; int toSingleNum(int a[]) {int i;int n = 0;int pow = 1;for( i = 7; i >= 0; i-- ) {n+=a[i]*pow;pow*=10;}return n; } int A(int a) {int m = a/10000;int n = a%10000;return n*10000 + m; } int B( int a) {int n3 = a/100000; // 123int n4 = a/10000; // 1234int n44 = n4-n3*10; // 4int n88 = a%10; // 5int n58 = a%10000; // 8765int n57 = (n58 - n88)/10; // 876return int(n44*1e7 + n3*1e4 + n88 * 1e3 + n57); } int C( int c) {int i, temp;int a[8];int pow = int(1e7);for( i = 0; i < 8; i++ ) {a[i] = c/pow;c = c%pow;pow /= 10;}temp = a[1];a[1] = a[5];a[5] = a[6];a[6] = a[2];a[2] = temp;return toSingleNum(a); } Node bfs(int M, int goal) {Node u,v;queue<Node> q;u.a = 12348765;u.path = "";if( u.a == goal )return u;q.push(u);while( !q.empty() ) {u = q.front();q.pop();if( u.a == goal )return u;if( u.path.size() > M ) {v.a = 0;v.path = "";return v;}v.a = A(u.a);v.path = u.path + "A";q.push(v);v.a = B(u.a);v.path = u.path + "B";q.push(v);v.a = C(u.a);v.path = u.path + "C";q.push(v);} } int main() {int i;int a[8] = { 1, 2, 3, 4 , 8, 7, 6, 5 };int b[8];char path[10];int M;//cout << tosinglenum(a) << endl;//cout << 1e4 << endl;//print(a(tosinglenum(a)));//print(b(tosinglenum(a)));//print(c(tosinglenum(a)));//system("pause");cin >> M;while( M != -1 ) {for( i = 0; i < 4; i++ )cin >> b[i];for ( i = 4; i < 8; i++ )cin >> b[i];Node s = bfs(M, toSingleNum(b));if( s.a == 0 ) {cout << "-1" << endl;}else{cout << s.path.size() << " " << s.path << endl;}cin >> M;}return 0; }
转载于:https://blog.51cto.com/xuewei/1351312
sicily 1150. 简单魔板相关推荐
- VJ - R - 魔板
题目来源 VJ - R - 魔板 ](https://vjudge.net/contest/441637#problem/O) 在魔方风靡全球之后不久,Rubik先生发明了它的简化版--魔板.魔板由8 ...
- [USACO3.2]魔板 Magic Squares
[USACO3.2]魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题 ...
- java51游戏_Java作业实践(一)魔板游戏
课题:魔板游戏 一.课设要求 1.基本功能 (1)游戏规则 一个3×3的魔板,有一个格子是空的,其他格子内随机放置1-8共8个编号的方块,通过单击任意一个与空格子相邻的方块可以把该方块移入空格子,不断 ...
- P2730 魔板 Magic Squares
不看题解肯定不会系列... 这道题可以用Cantor展开解决. Cantor展开可以求出一个数组是在全排列中的第几个. 具体怎么操作自己百度. Cantor展开的公式是:\(a[1] * (n - 1 ...
- 【题解】Luogu P2730 魔板
蒟蒻的第一道蓝题--好像也没有蓝的程度 一篇无STL的超弱题解(入门写法无误了QAQ 传送门 很经典的一道BFS 这是初始状态. 操作A 操作B 操作C 思路1 不使用cantor展开的情况 1. 对 ...
- php留言簿代码,php自治简单留言板代码
php自治简单留言板代码 $lianjie = mysql_connect("localhost","root","xiaolie") or ...
- 洛谷P2730 [IOI]魔板 Magic Squares
题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都有一种颜色.这8种颜 ...
- 【CyberSecurityLearning 附】使用PHP语言搭建简单的论坛:注册功能实现+PHP个人中心设计+简单留言板
使用PHP语言搭建简单的论坛 简单留言板 留言 个人中心 登录 验证码 注册 头像 ...
- Magic Squares 魔板 (BFS+HASH)
Description 在成功地发明了魔方之后,拉比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方格都有一种颜色.这8 ...
最新文章
- 深度学习(4)基础4 -- 神经网络架构激活函数过拟合处理
- Swoft 2 Beta 发布,基于 Swoole 的云原生协程框架
- 微软职位内部推荐-Senior Software Engineer
- Linux中光盘使用的文件类型,linux下mount命令使用详解---linux挂载光盘等文件系统...
- centos6.8 配置 tomcat
- Java IO流 、 Properties 、 枚举
- Linux中英文命令对应
- linux清空垃圾箱的命令,在Linux系统下安装Autotrash并使用Autotrash自动清空垃圾箱...
- 【canvas】linejoin——miterLimit
- ElasticSearch搜索引擎:数据的写入流程
- c++早绑定和晚绑定
- Java文件上传同时携带参数
- 自定义view————涂鸦画板
- 基于 Ubuntu20.04 的工作环境搭建
- 360抢票 网站维护中 你的登录被踢了!
- C# Winform Socket即时通讯
- 《指数基金投资指南》笔记整理
- Flask源码阅读(六)——Flash消息
- 用Python Opencv实现视频快进
- 图像分割常见Loss
热门文章
- sqlserver 查找某个字段在哪张表里
- (59)Linux操作系统深入应用
- C/S与B/S架构的区别和优缺点
- Android LayoutInflater.inflate源码解析
- Objective C 中的nil,Nil,NULL和NSNull理解
- Microsoft.Jet.OLEDB.4.0”提供程序不支持 ITransactionLocal 接口。本地事务不可用于当前提供程序...
- XP系统,在文件或文件夹属性里找不到安全选项卡
- Protobuf 的 proto3 与 proto2 的区别
- Joint Bilateral Filtering 双边滤波
- 数据库:数据库优化(一)