【搜索】魔板问题(BFS)
【搜索】魔板问题
时间限制: 1 Sec 内存限制: 64 MB
提交: 5 解决: 3
[提交][状态][讨论版]
题目描述
对于魔板可施加三种不同的操作,分别以A,B,C标识,具体操作方法如图所示。
对于每种可能的状态,这三种基本操作都可以使用。你要编程计算用最少的基本操作完成基本状态到特殊状态的转换,输出基本操作序列。
输入
输出
第二行在字典序中最早出现的操作序列,用字符串表示,除最后一行外,每行输出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)的更多相关文章
- Sicily 1150: 简单魔板(BFS)
此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int o ...
- Sicily 1051: 魔板(BFS+排重)
相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...
- 魔板 (bfs+康托展开)
# 10027. 「一本通 1.4 例 2」魔板 [题目描述] Rubik 先生在发明了风靡全球魔方之后,又发明了它的二维版本--魔板.这是一张有 888 个大小相同的格子的魔板: 1 2 3 4 8 ...
- HDU - 1430 魔板 【BFS + 康托展开 + 哈希】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1430 思路 我刚开始 想到的 就是 康托展开 但是这个题目是 多组输入 即使用 康托展开 也是会T的 ...
- HDU_1430 魔板 【BFS+康托展开+置换】
一.题面 POJ1430 二.分析 该题与之前做的八数码不同,它是一个2*4的棋盘,并且没有空的区域.这样考虑的情况是很少的,依然结合康托展开,这时康托展开最多也只乘7的阶乘,完全可以BFS先预处理一 ...
- HDU1430;魔板(BFS+康托展开)
传送门 题意 给出初始序列与终止序列,给出三种操作,问最少经过几次操作能使初始->终止,输出操作(字典序最小) 分析 字符串只有8个字符,使用康托展开. 1.BFS将所有序列从"123 ...
- HDU 1430 魔板(康托展开+BFS+预处理)
魔板 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
- hdu1430魔板(BFS+康托展开)
做这题先看:http://blog.csdn.net/u010372095/article/details/9904497 Problem Description 在魔方风靡全球之后不久,Rubik先 ...
- Sicily1151:魔板搜索及优化
最终优化代码地址: https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1151.c 题目如下 Constraints ...
随机推荐
- cdh版本的hadoop安装及配置(伪分布式模式) MapReduce配置 yarn配置
安装hadoop需要jdk依赖,我这里是用jdk8 jdk版本:jdk1.8.0_151 hadoop版本:hadoop-2.5.0-cdh5.3.6 hadoop下载地址:链接:https://pa ...
- warning LNK4070的解决办法
原文链接地址:http://blog.csdn.net/clever101/article/details/5898073#comments 重命名了一个MFC常规DLL ...
- NOIP2012 洛谷P1084 疫情控制
Description: H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控制疫情 ...
- HNOI2002 营业额统计 [Splay]
题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...
- HDFS集中化缓存管理
概述 HDFS中的集中化缓存管理是一个明确的缓存机制,它允许用户指定要缓存的HDFS路径.NameNode会和保存着所需快数据的所有DataNode通信,并指导他们把块数据缓存在off-heap缓存中 ...
- wget命令下载FTP整个目录进行文件备份
使用wget下载整个FTP目录,可以用于服务器间文件传输,进行远程备份.通过限制网速,可以解决带宽限制问题. #wget ftp://IP:PORT/* --ftp-user=xxx --ftp-pa ...
- 解决在极光推送的时候会出现一个 JPush提示:缺少统计代码
<span style="font-size:14px;"> @Override protected void onResume(){ super.onResume() ...
- 【CF1027D】Mouse Hunt(拓扑排序,环)
题意:给定n个房间,有一只老鼠可能从其中的任意一个出现, 在第i个房间设置捕鼠夹的代价是a[i],若老鼠当前在i号房间则下一秒会移动到b[i]号, 问一定能抓住老鼠的最小的总代价 n<=2e5, ...
- I wrote a JSONHelper extension
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Newtonso ...
- Python 基础总结
1.执行python脚本的两种方式: 答:1../run.py.shell直接调用python脚本 2.python run.py 调用python 解释器来调用python脚本 5.python单行 ...