【搜索】魔板问题(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 ...
 
随机推荐
- C&C++——extern
			
1.C 调用C++的函数或变量 C 调用C++的函数或变量,在C++的头文件声明为extern "C" ,C调用的时候只使用extern 声明. 可见,extern "C ...
 - 【COGS 2051】王者之剑 最小割
			
这个其实就是在说明相邻的点不能取,我们发现只要其满足这个条件他总能走出来,那么我们就最小割就是了,我们先黑白染色,S 一排黑点 一排白点 T 对于相邻的点我们就直接中间连INF,于是就满足只要一个点选 ...
 - P2764 最小路径覆盖问题
			
题目描述 «问题描述: 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶点开 ...
 - 使用babel把es6代码转成es5代码
			
第一步:创建一个web项目 使用命令:npm init 这个命令的目的是生成package.json. 执行第二步中的命令后生成的package.json的文件的内容是: { "name&q ...
 - nginx,docker反向代理
			
1. [root@javanginx ~]# cat /etc/nginx/nginx.conf user root root;worker_processes 4;error_log /var/lo ...
 - Java 处理 XML 的三种主流技术及介绍
			
Java 处理 XML 的三种主流技术及介绍 原文地址:https://www.ibm.com/developerworks/cn/xml/dm-1208gub/ XML (eXtensible Ma ...
 - Python爬虫学习笔记之抓取猫眼的排行榜
			
代码: import json import requests from requests.exceptions import RequestException import re import ti ...
 - tomcat编码配置
			
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" ...
 - MyBatis对象关联关系----多对多的保存与查询
			
模拟情景: 对象:学生,课程 关系:一个学生可选多个课程,一门课程可被多个学生选择 一.保存 1.创建数据库表,student,course,student_course,其中student_cour ...
 - POJ1182 食物链---(经典种类并查集)
			
题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...