博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
magic cube
阅读量:5919 次
发布时间:2019-06-19

本文共 2725 字,大约阅读时间需要 9 分钟。

搜索题,

每个状态能扩展出12种状态,最多进行5次旋转12^5

要用到iddfs,或者我看到网上其他人用的ida*

 

我也是参考了别人的代码,而且这个题vj上有点问题,我看数据看了半天,愣是没看明白第二个数据咋回事,后来才知道是vj显示的有问题

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define ll long long#define se second#define fi first#define oo 0x3fffffff/* 40 1 2 3 5 1 2 3// 4 5 6// 7 8 9//10 11 12 13 14 15 16 17 18 19 20 21//22 23 24 25 26 27 28 29 30 31 32 33//34 35 36 37 38 39 40 41 42 43 44 45// 46 47 48// 49 50 51// 52 53 54*/int cent[7] = { 23, 26, 29, 32, 5, 50};int face[7][10] = {{ 10,11,12,22,23,24,34,35,36},{ 13,14,15,25,26,27,37,38,39},{ 16,17,18,28,29,30,40,41,42},{ 19,20,21,31,32,33,43,44,45},{ 1,2,3,4,5,6,7,8,9},{ 46,47,48,49,50,51,52,53,54}};int change[12][23] = { { 1,4,7,13,25,37,46,49,52,21,33,45,10,11,12,24,36,35,34,22}, { 45,33,21,1,4,7,13,25,37,52,49,46,34,22,10,11,12,24,36,35}, { 7,8,9,16,28,40,48,47,46,36,24,12,13,14,15,27,39,38,37,25}, { 36,24,12,7,8,9,16,28,40,48,47,46,37,25,13,14,15,27,39,38}, { 9,6,3,19,31,43,54,51,48,39,27,15,16,17,18,30,42,41,40,28}, { 39,27,15,9,6,3,19,31,43,54,51,48,40,28,16,17,18,30,42,41}, { 42,30,18,3,2,1,10,22,34,52,53,54,19,20,21,33,45,44,43,31}, { 52,53,54,42,30,18,3,2,1,10,22,34,43,31,19,20,21,33,45,44}, { 15,14,13,12,11,10,21,20,19,18,17,16,1,2,3,6,9,8,7,4}, { 18,17,16,15,14,13,12,11,10,21,20,19,7,4,1,2,3,6,9,8}, { 37,38,39,40,41,42,43,44,45,34,35,36,46,47,48,51,54,53,52,49}, { 34,35,36,37,38,39,40,41,42,43,44,45,52,49,46,47,48,51,54,53}};char s[60];int a[10],b[10];int maxdepth;int l = 0;bool dfs(int dep);bool judge();int main(){ int t; scanf("%d",&t); while(t--) { l = 0; for(int i = 1;i <= 54; ++i) scanf(" %c",s+i); //for(int i = 1; i <= 54; ++i) // printf("%c",s[i]); for(maxdepth = 1;maxdepth <= 5; ++maxdepth) { if(dfs(0)) { if(l == 0) { printf("0\n");break; } printf("%d\n", l); for(int i = 0; i < l-1; ++i) { printf("%d %d ",a[i],b[i]); } printf("%d %d\n",a[l-1],b[l-1]); break; } } if(maxdepth == 6) printf("-1\n"); }}bool judge(){ for(int i = 0; i < 6; ++i) { for(int j = 0; j < 9; ++j) { if(s[face[i][j]] != s[cent[i]]) return false; } } return true;}bool dfs(int dep){ if(judge()) { l = dep; return true; } if(dep >= maxdepth) return false; char tmp[60]; memcpy(tmp,s,sizeof s); for(int i = 0; i < 12; ++i) { for(int j = 0; j < 20; ++j) { s[change[i][j]] = tmp[change[i^1][j]]; } /*if(dep == 0) { for(int i = 0; i < 6; ++i) for(int j = 0; j < 9; ++j) printf("%c",s[face[i][j]]); cout << " " << (i&1) << endl; cout << endl; }*/ a[dep] = i/2; b[dep] = i&1?-1:1; if(dfs(dep+1)) return true; memcpy(s,tmp,sizeof tmp); } return false;}

 

转载于:https://www.cnblogs.com/mltang/p/9762697.html

你可能感兴趣的文章
java基础(三章)
查看>>
Eclipse SVN 冲突的 介绍 及 四种解决方式
查看>>
Python学习笔记__19.1章 HTTP协议
查看>>
df命令、du命令、磁盘分区
查看>>
部署LNMP 、 Nginx+FastCGI 、 Nginx高级技术
查看>>
IT经理在未来几年中的生存指南
查看>>
第一次写博客---》记录贴
查看>>
家庭服务器数据中心能实现的应用其实不止这些
查看>>
Spring Cloud综合实战 - 基于TCC补偿模式的分布式事务
查看>>
如何在gitlab 数据备份
查看>>
CDH HDFS文件系统垃圾间隔设置
查看>>
java抽象数据类型
查看>>
CentOS7_LAMP-https-discuz搭建,WordPress搭建及phpMyadmin搭建_2015091902
查看>>
postgres 定期备份shell
查看>>
写在C#.NET通用权限管理系统组件源码销售额突破(23000元/月)大关,客户数量超过156人...
查看>>
大哥你都有房子有车子还拿着双份工资收入,不能总想让兄弟免费来杭州帮忙啊,开不来这个口啊...
查看>>
响应式网页设计:web产品RWD概念
查看>>
RHCE_LAB(2)SSH远程登录自动验证(不输入用户登录密码)的实现
查看>>
Linux命令之uniq
查看>>
vlan技术与单臂路由
查看>>