3.2.5 Magic Squares 魔板

成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板。这是一张有8个大小相同的格子的魔板:

1  2  3  4
8 7 6 5

我们知道魔板的每一个方格都有一种颜色。这8种颜色用前8个正整数来表示。可以用颜色的序列来表示一种魔板状态,规定从魔板的左上角开始,沿顺时针方向依次取出整数,构成一个颜色序列。对于上图的魔板状态,我们用序列(1,2,3,4,5,6,7,8)来表示。这是基本状态。

这里提供三种基本操作,分别用大写字母“A”,“B”,“C”来表示(可以通过这些操作改变魔板的状态):

“A”:交换上下两行;
“B”:将最右边的一列插入最左边;
“C”:魔板中央四格作顺时针旋转。

下面是对基本状态进行操作的示范:

A:  8  7  6  5
1 2 3 4
B: 4 1 2 3
5 8 7 6
C: 1 7 2 4
8 6 3 5

对于每种可能的状态,这三种基本操作都可以使用。

你要编程计算用最少的基本操作完成基本状态到目标状态的转换,输出基本操作序列。

格式

PROGRAM NAME: msquare

INPUT FORMAT:

(file msquare.in)

只有一行,包括8个整数,用空格分开(这些整数在范围 1——8 之间)不换行,表示目标状态。

OUTPUT FORMAT:

(file msquare.out)

Line 1: 包括一个整数,表示最短操作序列的长度。

Line 2: 在字典序中最早出现的操作序列,用字符串表示,除最后一行外,每行输出60个字符。

SAMPLE INPUT

2 6 8 4 5 7 3 1

SAMPLE OUTPUT

7
BCABCCB

时间限制:1000ms
空间限制:128MByte

#include<bits/stdc++.h>
using namespace std;
int a, n, ans, t, tmp;
bool st[];
string s, anss;
vector<int> fst, mb, now, now1;
queue<vector<int> > q;
queue<int> q1;
queue<string> q2; vector<int> bh(int mode, vector<int> v)
{
if(mode == )
for(int i = ; i <; i++) swap(v[i], v[i +]);
else if(mode == ){
t = v[];
for(int i = ; i >; i--) v[i] = v[i -];
v[] = t;
t = v[];
for(int i = ; i >; i--) v[i] = v[i -];
v[] = t;
}
else if(mode == ){
t = v[];
v[] = v[], v[] = v[];
v[] = v[], v[] = t;
}
return (v);
} int main()
{
for(int i = ; i <= ; i++) cin>>a, mb.push_back(a);
swap(mb[], mb[]), swap(mb[], mb[]);
for(int i = ; i <= ; i++) fst.push_back(i);
for(int i = ; i >= ; i--) fst.push_back(i);
q.push(fst);
q1.push();
q2.push("");
while(!q.empty()){
now = q.front();
n = q1.front();
s = q2.front();
q.pop(), q1.pop(), q2.pop();
if(now == mb){
ans = n;
anss = s;
break;
}
for(int i = ; i <= ; i++){
now1 = bh(i, now);
tmp = ;
for(int j = ; j < ; j++) tmp = tmp * + now1[j];
if(st[tmp]) continue;
st[tmp] = ;
q.push(now1);
q1.push(n + );
q2.push(s + char('A' + i -));
}
}
cout<<ans<<endl<<anss<<endl;
return ;
}

3.2.5 Magic Squares 魔板的更多相关文章

  1. [hash-bfs]USACO 3.2 Magic Squares 魔板

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

  2. 洛谷 P2730 魔板 Magic Squares 解题报告

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

  3. 哈希+Bfs【P2730】 魔板 Magic Squares

    没看过题的童鞋请去看一下题-->P2730 魔板 Magic Squares 不了解康托展开的请来这里-->我这里 至于这题为什么可以用康托展开?(瞎说时间到. 因为只有8个数字,且只有1 ...

  4. 【简●解】 LG P2730 【魔板 Magic Squares】

    LG P2730 [魔板 Magic Squares] [题目背景] 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 ...

  5. 洛谷 P2730 魔板 Magic Squares

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

  6. [USACO3.2]魔板 Magic Squares

    松下问童子,言师采药去. 只在此山中,云深不知处.--贾岛 题目:魔板 Magic Squares 网址:https://www.luogu.com.cn/problem/P2730 这是一张有8个大 ...

  7. 「一本通 1.4 例 2」[USACO3.2]魔板 Magic Squares

    [USACO3.2]魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题 ...

  8. [洛谷P2730] 魔板 Magic Squares

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

  9. 魔板 Magic Squares(广搜,状态转化)

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

随机推荐

  1. XStream xml转java对象2

    <?xml version="1.0" encoding="UTF-8" ?> <person> <name>yunyun& ...

  2. Spring Boot(一)Hello World

    Spring Boot适合与微服务,方便快速开发,简化配置(约定>配置). 准备工作: SpringBoot 2.0 jdk8 IDEA或者eclipse+Spring Tool Suits 创 ...

  3. Flyweight_pattern--reference

    http://en.wikipedia.org/wiki/Flyweight_pattern In computer programming, flyweight is a software desi ...

  4. linux 编译安装php7

    1.下载php7安装包: php7 2.解压 .tar.gzcd php-7.1.5 3.可能需要的扩展 yum install libmcrypt libmcrypt-devel mcrypt mh ...

  5. [HZOI 2015]树黑白

    [题目描述] 给定一棵树,要求维护以下操作: 1.M u 将u节点反色 2.Q u 查询u到所有黑色节点距离和 [输入格式] 第一行n,m 表示节点总数和操作次数 之后n-1行,每行u,v表示两个端点 ...

  6. Log4.Net日志记录解析

    http://www.cnblogs.com/neekerss/archive/2011/01/04/1925171.html

  7. CentOS安装最新Git

    1.依赖库安装 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum install gcc pe ...

  8. hystrix应用介绍(一)

    声明:本文仅做个人的一次接口重构过程记录,期间参考了一些写的不错的博客,如果存在抄袭,请留言. hystrix基本介绍 hystrix 是一个开源的容灾框架,目的是为了解决当依赖服务出现故障或者接口响 ...

  9. iOS中MD5加密字符串实现

    1.MD5加密 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护.该算法的文件号为RFC 1321 ...

  10. vue2.0高仿饿了么better-scroll

    首先安装better-scroll npm i better-scroll -S goods页面模板 <template> <div class="goods"& ...