ZOJ - 2477 dfs [kuangbin带你飞]专题二
注意输入的处理,旋转操作打表。递增枚举可能步数,作为限制方便找到最短路。
AC代码:90ms
#include<cstdio> #include<cstring> char magic[60]; int cube[6][9] = { {4,0,1,2,3,5,6,7,8},{22,9,10,11,21,23,33,34,35},{25,12,13,14,24,26,36,37,38}, {28,15,16,17,27,29,39,40,41},{31,18,19,20,30,32,42,43,44},{49,45,46,47,48,50,51,52,53} }; const int rot[12][20]={ {11,23,35,34,33,21, 9,10,51,48,45,36,24,12, 6, 3, 0,20,32,44}, //只有20个需要改变,每个中心无需改变 { 9,10,11,23,35,34,33,21,36,24,12, 6, 3, 0,20,32,44,51,48,45}, {14,13,26,38,37,36,24,12,45,46,47,39,27,15, 8, 7, 6,11,23,35}, {12,24,13,14,26,38,37,36,39,27,15, 8, 7, 6,11,23,35,45,46,47}, {17,29,41,40,39,27,15,16,47,50,53,42,30,18, 2, 5, 8,14,26,38}, {15,16,17,29,41,40,39,27,42,30,18, 2, 5, 8,14,26,38,47,50,53}, {18,19,20,32,44,43,42,30,53,52,51,33,21, 9, 0, 1, 2,17,29,41}, {42,30,18,19,20,32,44,43,33,21, 9, 0, 1, 2,17,29,41,53,52,51}, { 0, 1, 2, 5, 8, 7, 6, 3,12,13,14,15,16,17,18,19,20, 9,10,11}, { 6, 3, 0, 1, 2, 5, 8, 7,15,16,17,18,19,20, 9,10,11,12,13,14}, {45,46,47,50,53,52,51,48,44,43,42,41,40,39,38,37,36,35,34,33}, {51,48,45,46,47,50,53,52,41,40,39,38,37,36,35,34,33,44,43,42} }; bool is_ok() { for(int i = 0; i < 6; ++i) { for(int j = 0; j < 8; ++j) { if(magic[cube[i][j]] != magic[cube[i][j+1]]) return false; } } return true; } void rotate(int k) { //旋转第k面 int h = k ^ 1; //对应转动方式,顺时针or逆时针 char tmp[60]; memcpy(tmp, magic, sizeof(magic)); for(int i = 0; i < 20; ++i) { magic[rot[k][i]] = tmp[rot[h][i]]; } } int ans[2][10]; int limit; int dfs(int cnt) { if(cnt >= limit) return is_ok(); char old[60]; memcpy(old, magic, sizeof(magic)); for(int i = 0; i < 12; ++i) { rotate(i); ans[0][cnt] = i / 2; ans[1][cnt] = (i & 1) ? -1 : 1; if(dfs(cnt + 1)) return 1; memcpy(magic, old, sizeof(old)); } } int main() { int T; scanf("%d", &T); char str[60]; int kase = 0; while(T-- ) { if(kase++) getchar(); for(int i = 0; i < 54; ++i) { while(1) { char ch = getchar(); if(ch >= 'a' && ch <= 'z') { magic[i] = ch; break; } } } for(limit = 0; limit <= 6; ++limit) { if(limit == 6) printf("-1\n"); else if(dfs(0)) { printf("%d\n", limit); for(int i = 0; i < limit; ++i) { printf("%d %d\n", ans[0][i], ans[1][i]); } break; } } } return 0; }
如有不当之处欢迎指出!
ZOJ - 2477 dfs [kuangbin带你飞]专题二的更多相关文章
- HDU - 2181 dfs [kuangbin带你飞]专题二
保存每个节点的下一个节点一直往下面走就行了,不能重复经过某个点,当经过的点达到20个而且当前节点的下一个节点是起点就打印答案. AC代码 #include<cstdio> #include ...
- 【算法系列学习三】[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开
[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 这是一道经典的八数码问题.首先,简单介绍一下八数码问题: 八数码问题也称为九宫问题.在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的 ...
- POJ - 1321 dfs [kuangbin带你飞]专题一
枚举行和列即可,当前已经放下cnt个棋子,当前已经搜索到第r行,如果 n - r + cnt < k 直接退出,因为后面无法放下剩下的棋子. AC代码 #include<cstdio&g ...
- [kuangbin带你飞]专题二十二 区间DP
ID Origin Title 17 / 60 Problem A ZOJ 3537 Cake 54 / 105 Problem B LightOJ 1422 Hallowee ...
- HDU - 3001 Travelling 状压dp + 三进制 [kuangbin带你飞]专题二
终于刷完搜索专题了. 题意:给定n个城市,每个城市参观不能超过两次,两个城市之间有道路通过需要花费X,求通过能所有城市的最小花费. 思路:每个城市有三个状态0,1,2,可用三进制存储所有城市的访问状态 ...
- HDU1560 DNA sequence IDA* + 强力剪枝 [kuangbin带你飞]专题二
题意:给定一些DNA序列,求一个最短序列能够包含所有序列. 思路:记录第i个序列已经被匹配的长度p[i],以及第i序列的原始长度len[i].则有两个剪枝: 剪枝1:直接取最长待匹配长度.1900ms ...
- HDU - 3567 IDA* + 曼哈顿距离 + 康托 [kuangbin带你飞]专题二
这题难度颇大啊,TLE一天了,测试数据组数太多了.双向广度优先搜索不能得到字典序最小的,一直WA. 思路:利用IDA*算法,当前状态到达目标状态的可能最小步数就是曼哈顿距离,用于搜索中的剪枝.下次搜索 ...
- [kuangbin带你飞]专题二十 斜率DP
ID Origin Title 20 / 60 Problem A HDU 3507 Print Article 13 / 19 Problem B HDU 2829 Lawr ...
- 【算法系列学习】[kuangbin带你飞]专题二 搜索进阶 D - Escape (BFS)
Escape 参考:http://blog.csdn.net/libin56842/article/details/41909459 [题意]: 一个人从(0,0)跑到(n,m),只有k点能量,一秒消 ...
随机推荐
- Servlet--HttpUtils类
定义 public class HttpUtils 收集 HTTP Servlet 使用的静态的有效的方法. 方法 1.getRequestURL public static StringBuffer ...
- error_reporting
有关error_reporting()函数: error_reporting() 设置 PHP 的报错级别并返回当前级别. ; 错误报告是按位的,或者将数字加起来得到想要的错误报告等级. ; E_AL ...
- 在nagios中使用nrpe自定义脚本
nrpe的安装 tar xvfz nrpe-2.13.tar.gz cd nrpe-2.13 ./configure make all make install-plugin make inst ...
- jenkins构建自由风格项目[四]
标签(linux): jenkins 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 构建一个php项目 创建一个新的项目 选择从git获取源码 配置gitlab ...
- Lambda表达式详解 (转)
前言 1.天真热,程序员活着不易,星期天,也要顶着火辣辣的太阳,总结这些东西. 2.夸夸lambda吧:简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自C#1.0后新增的最重要的功能之一 ...
- Android图像数据传递到C++的一些坑
最近在做一个Android图象识别的app, 通过相机预览或者是拍照功能获取图像数据,然后将图像数据传递到本地C++的图像识别so库.在这个过程中花的时间最多的就是数据传输问题.谨以此坑,警示未来! ...
- re模块与正则表达式
一.正则表达式概念 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),是计算机科 ...
- 不免费的PacMan
课程内容介绍: 本套课程适合以下人士: - 免费资料没教会你游戏开发的: - 学了Unity基础不知道怎么用在游戏项目里的: - 想快速开发一款好玩的游戏的: - 想学游戏不知道如何入门的: - 对游 ...
- rabbitmq的构架和原理(三)
前面两篇博文已经将环境安装和相关配置介绍了,现在开始正式学习rabbitmq的使用了: rabbitMQ的构架 rabbitmq作为消息队列,一条消息从发布到订阅消费的完整流程为: 消息 --> ...
- 窗口缩小div内容隐藏看不到怎么解决?
div的宽度设置为100%,并设置其背景颜色,但当窗口发生变化出现横向滚动条,拉滚动条的时候发现右面是空白的. 解决方法:body{min-width:1024px},给body加上一个最小宽度.ie ...