【搜索】魔板问题(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 ...
随机推荐
- [BZOJ3196][Tyvj1730]二逼平衡树
[BZOJ3196][Tyvj1730]二逼平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询 \(k\) 在区间内的排名 查询区间内排名为 \ ...
- [学习笔记]扩展LUCAS定理
可以先做这个题[SDOI2010]古代猪文 此算法和LUCAS定理没有半毛钱关系. [模板]扩展卢卡斯 不保证P是质数. $C_n^m=\frac{n!}{m!(n-m)!}$ 麻烦的是分母. 如果互 ...
- 强大的JQuery数组封装使用
JQuery对数组的处理非常便捷并且功能强大齐全,一步到位的封装了很多原生js数组不能企及的功能.下面来看看JQuery数组的强大之处在哪. $.each(array, [callback]) 遍历 ...
- Spring源码解析-事件
Spring事件的组件 主要是3个组件: 1.ApplicationEvent 事件 2.ApplicationListener 监听器,对事件进行监听 3.ApplicationEventMul ...
- 从零开始学习MXnet(一)
最近工作要开始用到MXnet,然而MXnet的文档写的实在是.....所以在这记录点东西,方便自己,也方便大家. 我觉得搞清楚一个框架怎么使用,第一步就是用它来训练自己的数据,这是个很关键的一步. 一 ...
- UVA10480:Sabotage(最小割+输出)
Sabotage 题目链接:https://vjudge.net/problem/UVA-10480 Description: The regime of a small but wealthy di ...
- angular js 模拟获取后台的数据
在这里我们把后台的数据用一个.json文件进行代替. 项目的目录结构如下: puDongLibraryLearning----ui-router-learning ---- data-------pe ...
- 使用T4模板生成MySql数据库实体类
注:本文系作者原创,但可随意转载. 现在呆的公司使用的数据库几乎都是MySQL.编程方式DatabaseFirst.即先写数据库设计,表设计按照规范好的文档写进EXCEL里,然后用公司的宏,生成建表脚 ...
- Java之戳中痛点 - (3)三目运算符的两个操作数类型尽量一致
先看一个例子: package com.test; public class TernaryOperator { public static void main(String[] args) { in ...
- PhoneGap之自定义插件
PhoneGap:作为原生App,Java(这里面是指Android的)与JavaScript 的通信桥梁,使得我们的混合开发更加得心应手,我是与Android结合的混合开发. 但在这里不得不吐槽一下 ...