【搜索】魔板问题

时间限制: 1 Sec  内存限制: 64 MB
提交: 5  解决: 3
[提交][状态][讨论版]

题目描述

据说能使持有者成为世界之主的上古神器隐藏在魔板空间,魔板由8个同样大小的方块组成,每个方块颜色均不相同,按顺时针方向依次写下各方块的颜色代号,例如序列(1,2,3,4,5,6,7,8)即代表图所示的魔板状态。

对于魔板可施加三种不同的操作,分别以A,B,C标识,具体操作方法如图所示。

对于每种可能的状态,这三种基本操作都可以使用。你要编程计算用最少的基本操作完成基本状态到特殊状态的转换,输出基本操作序列。

输入

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

输出

第一行包括一个整数,表示最短操作序列的长度。

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

样例输入

2 6 8 4 5 7 3 1

样例输出

7
BCABCCB

提示

样例的输入目标状态是由BCABCCB这7步操作获得的,如图所示。

【分析】化为一维字符串,反正也只有八个,暴力BFS。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <time.h>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#define inf 0x3f3f3f3f
#define mod 1000000007
typedef long long ll;
using namespace std;
const int N = ;
const int MAX = ;
int n,m,maxn=-;
int vis[N];
string s="",anss;
bool flag=false;
map<string,int>p;
struct man
{
string str;
string ans;
int step;
};
queue<man>q;
void bfs()
{
string str="";
string ans="";
man d;d.ans=ans;d.step=;d.str=str;
p[str]=;
q.push(d);
while(!q.empty()){
man t=q.front();
// cout<<t.str<<" "<<t.step<<endl;
// if(t.str=="68423751")printf("!!!!!");
q.pop();
if(t.str==s){
if(!flag){
anss=t.ans;flag=true;
}
else anss=min(anss,t.ans);
//cout<<t.ans<<endl;system("pause");
}
//操作A
string l,r;
l=t.str.substr(,);r=t.str.substr(,);
string str1=r+l;
if(!p[str1]){
p[str1]=;
man k;k.ans=t.ans+'A';k.step=t.step+;k.str=str1;q.push(k);
}
//操作B
string a="";
a=a+t.str[]+t.str[]+t.str[]+t.str[]+t.str[]+t.str[]+t.str[]+t.str[];
if(!p[a]){
p[a]=;
man k;k.ans=t.ans+'B';k.step=t.step+;k.str=a;q.push(k);
}
//操作C
string f="";
f=f+t.str[]+t.str[]+t.str[]+t.str[]+t.str[]+t.str[]+t.str[]+t.str[];
if(!p[f]){
p[f]=;
man k;k.ans=t.ans+'C';k.step=t.step+;k.str=f;q.push(k);
}
}
}
int main(){
int aa[];
for(int i=;i<=;i++){
scanf("%d",&aa[i-]);
if(i<=)s+=aa[i-]+'';
}
for(int i=;i>=;i--){
s+=aa[i-]+'';
}
bfs();
cout<<anss.size()<<endl<<anss<<endl;
return ;
}

【搜索】魔板问题(BFS)的更多相关文章

  1. Sicily 1150: 简单魔板(BFS)

    此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int o ...

  2. Sicily 1051: 魔板(BFS+排重)

    相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...

  3. 魔板 (bfs+康托展开)

    # 10027. 「一本通 1.4 例 2」魔板 [题目描述] Rubik 先生在发明了风靡全球魔方之后,又发明了它的二维版本--魔板.这是一张有 888 个大小相同的格子的魔板: 1 2 3 4 8 ...

  4. HDU - 1430 魔板 【BFS + 康托展开 + 哈希】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1430 思路 我刚开始 想到的 就是 康托展开 但是这个题目是 多组输入 即使用 康托展开 也是会T的 ...

  5. HDU_1430 魔板 【BFS+康托展开+置换】

    一.题面 POJ1430 二.分析 该题与之前做的八数码不同,它是一个2*4的棋盘,并且没有空的区域.这样考虑的情况是很少的,依然结合康托展开,这时康托展开最多也只乘7的阶乘,完全可以BFS先预处理一 ...

  6. HDU1430;魔板(BFS+康托展开)

    传送门 题意 给出初始序列与终止序列,给出三种操作,问最少经过几次操作能使初始->终止,输出操作(字典序最小) 分析 字符串只有8个字符,使用康托展开. 1.BFS将所有序列从"123 ...

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

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

  8. hdu1430魔板(BFS+康托展开)

    做这题先看:http://blog.csdn.net/u010372095/article/details/9904497 Problem Description 在魔方风靡全球之后不久,Rubik先 ...

  9. Sicily1151:魔板搜索及优化

    最终优化代码地址: https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1151.c 题目如下 Constraints ...

随机推荐

  1. C&C++——extern

    1.C 调用C++的函数或变量 C 调用C++的函数或变量,在C++的头文件声明为extern "C" ,C调用的时候只使用extern 声明. 可见,extern "C ...

  2. 【COGS 2051】王者之剑 最小割

    这个其实就是在说明相邻的点不能取,我们发现只要其满足这个条件他总能走出来,那么我们就最小割就是了,我们先黑白染色,S 一排黑点 一排白点 T 对于相邻的点我们就直接中间连INF,于是就满足只要一个点选 ...

  3. P2764 最小路径覆盖问题

    题目描述 «问题描述: 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶点开 ...

  4. 使用babel把es6代码转成es5代码

    第一步:创建一个web项目 使用命令:npm init 这个命令的目的是生成package.json. 执行第二步中的命令后生成的package.json的文件的内容是: { "name&q ...

  5. nginx,docker反向代理

    1. [root@javanginx ~]# cat /etc/nginx/nginx.conf user root root;worker_processes 4;error_log /var/lo ...

  6. Java 处理 XML 的三种主流技术及介绍

    Java 处理 XML 的三种主流技术及介绍 原文地址:https://www.ibm.com/developerworks/cn/xml/dm-1208gub/ XML (eXtensible Ma ...

  7. Python爬虫学习笔记之抓取猫眼的排行榜

    代码: import json import requests from requests.exceptions import RequestException import re import ti ...

  8. tomcat编码配置

    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" ...

  9. MyBatis对象关联关系----多对多的保存与查询

    模拟情景: 对象:学生,课程 关系:一个学生可选多个课程,一门课程可被多个学生选择 一.保存 1.创建数据库表,student,course,student_course,其中student_cour ...

  10. POJ1182 食物链---(经典种类并查集)

    题目链接:http://poj.org/problem?id=1182   食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submission ...