3.2.5 Magic Squares 魔板
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 魔板的更多相关文章
- [hash-bfs]USACO 3.2 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 题目描述 ...
- 哈希+Bfs【P2730】 魔板 Magic Squares
没看过题的童鞋请去看一下题-->P2730 魔板 Magic Squares 不了解康托展开的请来这里-->我这里 至于这题为什么可以用康托展开?(瞎说时间到. 因为只有8个数字,且只有1 ...
- 【简●解】 LG P2730 【魔板 Magic Squares】
LG P2730 [魔板 Magic Squares] [题目背景] 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 ...
- 洛谷 P2730 魔板 Magic Squares
P2730 魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 ...
- [USACO3.2]魔板 Magic Squares
松下问童子,言师采药去. 只在此山中,云深不知处.--贾岛 题目:魔板 Magic Squares 网址:https://www.luogu.com.cn/problem/P2730 这是一张有8个大 ...
- 「一本通 1.4 例 2」[USACO3.2]魔板 Magic Squares
[USACO3.2]魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题 ...
- [洛谷P2730] 魔板 Magic Squares
洛谷题目链接:魔板 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都 ...
- 魔板 Magic Squares(广搜,状态转化)
题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都有一种颜色.这8种颜 ...
随机推荐
- (转)stty 命令说明及使用讲解
stty 命令说明及使用讲解 UNIX系统的命令很多,但是巧妙使用命令的方法更多.随着经验的积累和观察学习其他用户的实践,我们也可学会解决特殊问题的方法.这里谈谈自己使用UNIX系统中stty ...
- DEDE把变量放进session中,结果取值为null的问题
最近在基于织梦CMS(dedecms)做公司网站,可以说改动不少,而其中最令我印象深刻的就是织梦的session. 自己想在前台页面限制一些用户的访问,且后台用户可以访问.必须验证织梦后台用户的 ...
- element中遇到的表格问题总结
1.列表表头的颜色自定义 <el-table :data="pageData" style="width: 100%;" height="500 ...
- P2626 斐波那契数列(升级版)
题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数). 题目描述 ...
- #include stdio.h(7)
#include <stdio.h> int main() { //***********一.循环语句*************** //什么叫做循环: //重复的做某件事情,重复的执行一 ...
- h5:WebSocket
实时 Web 应用的窘境 Web 应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不是特 ...
- js之静态方法与实例方法
静态方法是指不需要声明类的实例就可以使用的方法. 实例方法是指必须要先使用"new"关键字声明一个类的实例, 然后才可以通过此实例访问的方法. function staticCla ...
- linux文件按照行数切割
公司小站的nginx服务器日志一直没有管理 到发现的时候已经有50G+的logs文件 查看起来十分不便 只能将其切割 接下来分享 具体方法 split -l 5000(行数) -a 5(增加文件名上限 ...
- 【起航计划 027】2015 起航计划 Android APIDemo的魔鬼步伐 26 App->Preferences->Preferences from XML 偏好设置界面
我们在前面的例子Android ApiDemo示例解析(9):App->Activity->Persistent State 介绍了可以使用Shared Preferences来存储一些状 ...
- SQL Server 2008 角色
固定服务器角色:按照从最低级别的角色(bulkadmin)到最高级别的角色(sysadmin)的顺序进行描述:Bulkadmin:这个服务器角色的成员可以运行BULK INSERT语句.这条语句允许从 ...