魔板

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1988    Accepted Submission(s): 407

Problem Description
在魔方风靡全球之后不久,Rubik先生发明了它的简化版——魔板。魔板由8个同样大小的方块组成,每个方块颜色均不相同,可用数字1-8分别表示。任一时刻魔板的状态可用方块的颜色序列表示:从魔板的左上角开始,按顺时针方向依次写下各方块的颜色代号,所得到的数字序列即可表示此时魔板的状态。例如,序列(1,2,3,4,5,6,7,8)表示魔板状态为:

1 2 3 4
8 7 6 5

对于魔板,可施加三种不同的操作,具体操作方法如下:

A: 上下两行互换,如上图可变换为状态87654321
B: 每行同时循环右移一格,如上图可变换为41236785
C: 中间4个方块顺时针旋转一格,如上图可变换为17245368

给你魔板的初始状态与目标状态,请给出由初态到目态变换数最少的变换步骤,若有多种变换方案则取字典序最小的那种。

Input
每组测试数据包括两行,分别代表魔板的初态与目态。
Output
对每组测试数据输出满足题意的变换步骤。
Sample Input
12345678
17245368
12345678
82754631

Sample Output
C
AC

预处理出所有答案
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <map>
#include <string>
using namespace std;
#define N 326888bool vis[N];
string way[N];
int fac[]={1,1,2,6,24,120,720,5040,40320,326880};struct node
{string s;string op;
};int Find(string &s)
{int i,j,res=0;bool has[10]={0};for(i=0;i<9;i++){int x=s[i]-'0',y=0;for(j=1;j<x;j++){if(!has[j]) y++;}res+=y*fac[8-i];has[x]=1;}return res+1;
}void bfs()
{int i,j;node now,next;queue<node> q;memset(vis,0,sizeof(vis));now.s="12345678";now.op="";q.push(now);vis[Find(now.s)]=1;while(!q.empty()){now=q.front();q.pop();way[Find(now.s)]=now.op;for(int i=1;i<=3;i++){next=now;if(i==1){next.op+='A';swap(next.s[0],next.s[7]);swap(next.s[1],next.s[6]);swap(next.s[2],next.s[5]);swap(next.s[3],next.s[4]);}else if(i==2){next.op+='B';char ch=next.s[3];for(j=3;j>=1;j--) next.s[j]=next.s[j-1];next.s[0]=ch;ch=next.s[4];for(j=4;j<7;j++) next.s[j]=next.s[j+1];next.s[7]=ch;}else{next.op+='C';char ch=next.s[1];next.s[1]=next.s[6];next.s[6]=next.s[5];next.s[5]=next.s[2];next.s[2]=ch;}if(!vis[Find(next.s)]){vis[Find(next.s)]=1;q.push(next);}}}
}
int main()
{bfs();string s1,s2;while(cin>>s1>>s2){map<char,char> mp;for(int i=0;i<8;i++) //好吧、这儿写反了,WA- -
        {mp[s1[i]]=i+1+'0';}for(int i=0;i<8;i++){s2[i]=mp[s2[i]];}cout<<way[Find(s2)]<<endl;}return 0;
}

转载于:https://www.cnblogs.com/hate13/p/4198053.html

[HDU 1430] 魔板相关推荐

  1. HDU 1430 魔板(康托展开+BFS+预处理)

    魔板 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  2. hdu.1430.魔板(bfs + 康托展开)

    魔板 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  3. hdu 1430 魔板

    刚开始不知道有康托展开,一筹莫展,查了一下大神题解.看到说要用康托展开,遂跑去学. 康托展开:http://blog.csdn.net/zhongkeli/article/details/696680 ...

  4. hdu 1430+hdu 3567(预处理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1430 思路:由于只是8种颜色,所以标号就无所谓了,对起始状态重新修改标号为 12345678,对目标状 ...

  5. java51游戏_Java作业实践(一)魔板游戏

    课题:魔板游戏 一.课设要求 1.基本功能 (1)游戏规则 一个3×3的魔板,有一个格子是空的,其他格子内随机放置1-8共8个编号的方块,通过单击任意一个与空格子相邻的方块可以把该方块移入空格子,不断 ...

  6. P2730 魔板 Magic Squares

    不看题解肯定不会系列... 这道题可以用Cantor展开解决. Cantor展开可以求出一个数组是在全排列中的第几个. 具体怎么操作自己百度. Cantor展开的公式是:\(a[1] * (n - 1 ...

  7. 【题解】Luogu P2730 魔板

    蒟蒻的第一道蓝题--好像也没有蓝的程度 一篇无STL的超弱题解(入门写法无误了QAQ 传送门 很经典的一道BFS 这是初始状态. 操作A 操作B 操作C 思路1 不使用cantor展开的情况 1. 对 ...

  8. 洛谷P2730 [IOI]魔板 Magic Squares

    题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都有一种颜色.这8种颜 ...

  9. Magic Squares 魔板 (BFS+HASH)

    Description 在成功地发明了魔方之后,拉比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方格都有一种颜色.这8 ...

  10. 魔板(洛谷-P2730)

    题目描述 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方格都有一种颜色.这8种颜色用前8个 ...

最新文章

  1. C#中throw抛出异常后,后续代码执行情况
  2. Codeforces Round #200 (Div. 1)A. Rational Resistance 数学
  3. Oracle自动备份脚本(Linux)
  4. 框架:SpringMVC的工作原理
  5. initdz linux挖坑病毒分析
  6. 软件设计文档国家标准_GB8567--88
  7. 安全狗护航金砖厦门会晤 圆满完成任务
  8. 单片机常用的几种通信协议
  9. 珍惜时间, 珍惜生命
  10. C++/QT:获取当前路径并通过相对路径读取文件
  11. android连mysql注册界面代码_Android实现注册登录界面的实例代码
  12. Spring Boot 中统一异常处理最佳实践介绍
  13. 【语音识别】基于matlab矢量量化(VQ)说话人识别【含Matlab源码 575期】
  14. 如何使非域模式下的组策略对管理员帐号无效
  15. viper4android fx2.7,ViPER4Android FX下载-ViPER4Android FX(蝰蛇音效fx)2.7.1.0 安卓版下载_东坡手机下载...
  16. Hijacking tons of Instapage expired users Domains Subdomains
  17. java正则表达式验证标点符号
  18. 51单片机c语言试题及答案,单片机C语言期末考试题..
  19. 栈与堆的区别(内存分配与数据结构)
  20. 自编码器(autoencoder)了解一下

热门文章

  1. android DVM
  2. JavaScript 字符串函数
  3. symantec BESR 异机恢复
  4. 类似地图比例尺钩子下边框实现
  5. Luogu5816 [CQOI2010]内部白点
  6. [数论] 快速傅里叶变换FFT
  7. javamail 解码 base64 html格式邮件_关于JavaMail,我遇上的那些史前巨坑...(建议收藏)
  8. python pdf转txt_Python之pdf转txt
  9. linux脚本中sed -i,Linux Shell 脚本之sed命令详解
  10. 树莓派串口通信编码_树莓派和STM32通过USB和串口通信记录