前言

好的,首先说明一下,这里用的是字符串的方法。根据c++字符串的尿性,速度比较慢,当然也可以改成字符数组,只不过我比较懒(没错╭(╯^╰)╮)


正题

有个2*4的矩阵被称为魔板,有三种操作
“A”:交换上下两行;
“B”:将最右边的一列插入最左边;
“C”:魔板中央四格作顺时针旋转。
然后初始状态是
1 2 3 4
8 7 6 5
然后嘞,就是嘞
给出一个状态,要求改变到那个状态。


输入输出(建议无视)

Input

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

Output

Line 1: 包括一个整数,表示最短操作序列的长度。
Line 2: 在字典序中最早出现的操作序列,用字符串表示,除最后一行外,每行输出60个字符。

Sample Input

2 6 8 4 5 7 3 1

Sample Output

7
BCABCCB


解题思路

这道题就是得把一块板线性化,然后找出变化规律。然后用哈希来判断重复优化广搜。
将线性化之后的版转换为数字,然后存进哈希表里判断重复。


代码

#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
const int ruler[3][8]={{8,7,6,5,4,3,2,1},{4,1,2,3,6,7,8,5},{1,7,2,4,5,3,6,8}};
//变化公式
string state[100003];//状态
string hash[100003],ss;//哈希表
int head,tail,z,x,father[100003],num[100003];
char dot[100003];
int hashm(string s)//哈希表
{int w=0;for (int i=0;i<8;i++){w=w*10+s[i]-48;}//转成数字w%=100003;//哈希函数int i=0;while (i<100003 && hash[(w+i)%100003]!="" && hash[(w+i)%100003]!=s)i++;//定位if (hash[(w+i)%100003]=="")//如果找到空位{hash[(w+i)%100003]=s;//记录return false;}else return true;//放回找到
}
void bfs()
{   hashm("12345678");//记录状态head=0;tail=1;state[1]="12345678";//状态记录do{head++;//出队for (int i=0;i<3;i++){tail++;//入队father[tail]=head;//记录上一个state[tail]="";//状态为空num[tail]=num[head]+1;//记录改变次数if (i==0) dot[tail]='A';if (i==1) dot[tail]='B';if (i==2) dot[tail]='C';//记录操作for (int j=0;j<8;j++){state[tail]+=state[head][ruler[i][j]-1];//变化状态}if (hashm(state[tail])) tail--;//拒绝入队else if (state[tail]==ss) return;//找到退出}}while(head<tail);
}
void print(int x)
{if (x==1) return;print(father[x]);//返回printf("%c",dot[x]);//输出
}
int main()
{for (int i=0;i<8;i++){scanf("%d",&x);ss+=x+48;//字符串}if (ss=="12345678") printf("0");//特殊判断else{bfs();//广搜printf("%d\n",num[tail]);//输出print(tail);//输出操作}
}

ssl1692-魔板【HSAH,bfs】相关推荐

  1. 算法提高课-搜索-最小步数模型-AcWing 1107. 魔板:bfs、复杂、八数码类似的题目

    题目分析 来源:acwing 分析: 最小步数模型常用哈希 按照ABC的顺序来搜,得到的是字典序最小的. 这里整幅"图"是一个状态, 装进一个字符串中,然后一个状态改变到另一个状态 ...

  2. Magic Squares 魔板 (BFS+HASH)

    Description 在成功地发明了魔方之后,拉比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方格都有一种颜色.这8 ...

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

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

  4. 魔板 Magic Squares(bfs优化)

    [USACO3.2]魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题 ...

  5. 【BFS】魔板(c++基础算法)

    本专栏上一篇:[BFS]八数码问题(c++基础算法) 目录 一.读题 ①题面 ②题意 三.做题 ①算法原理 ②算法实现 Ⅰ三种基本操作 Ⅱ操作序列 Ⅲ输出 Ⅳ一个特殊情况 四.AC代码 最后 一.读题 ...

  6. hdu.1430.魔板(bfs + 康托展开)

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

  7. P2730 魔板 Magic Squares

    不看题解肯定不会系列... 这道题可以用Cantor展开解决. Cantor展开可以求出一个数组是在全排列中的第几个. 具体怎么操作自己百度. Cantor展开的公式是:\(a[1] * (n - 1 ...

  8. 【题解】Luogu P2730 魔板

    蒟蒻的第一道蓝题--好像也没有蓝的程度 一篇无STL的超弱题解(入门写法无误了QAQ 传送门 很经典的一道BFS 这是初始状态. 操作A 操作B 操作C 思路1 不使用cantor展开的情况 1. 对 ...

  9. 洛谷P2730 [IOI]魔板 Magic Squares

    题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 题目描述 我们知道魔板的每一个方格都有一种颜色.这8种颜 ...

最新文章

  1. c语言提取颜色,C语言颜色转换宏
  2. odoo API装饰器one、model、multi的区别
  3. uni-app——一种通过Nginx反向代理处理302重定向请求解决网络请求中无法获取Cookie的解决方案
  4. 史上最全 Python Re 模块讲解(一)
  5. microsoft store更新不动_App Store顶尖笔记软件大更新!快来看看有何不同!(文末有福利)...
  6. mysql内置函数,在mysql里面利用str_to_date()把字符串转换为日期格式
  7. mysql流程控制_Mysql之流程控制结构
  8. AJAX(2),我的第一个AJAX程序
  9. Bootstrap 排版列表
  10. python replace函数后面的数字的含义
  11. 函数别名c语言,C最佳实践 – 函数类型别名std :: function或T.
  12. linux下mongodb的安装及启动
  13. atititt.java定时任务框架选型Spring Quartz 注解总结
  14. NTLite精简Windows 7 Ultimate SP1
  15. Filebeat日志收集
  16. 技术分享| RTC通讯中常用的音频格式
  17. 瀚高数据库块恢复示例
  18. APISpace 手机号码归属地API 方便好用
  19. 性能测试——系统业务指标
  20. VUE解决IE不能用的方法

热门文章

  1. 简述本地组策略中用户和计算机配置的差异,组策略编辑器中的计算机配置和用户配置有什么区别吗?...
  2. 原型链的理解_javascript之快速理解(原型链)
  3. python逐行读取数据时出现错误_python如何逐行读取数据
  4. centos 重启网卡_CentOS7网络配置和修改网卡名称及常用服务管理命令
  5. C++ 实现无向图的最小生成树Kruskal算法(完整代码)
  6. 计算机组成原理期末复习题
  7. oracle多条件分组统计_多条件统计,就必须用Ifs系列函数,绝对的高能!
  8. echarts字变大_在echarts中如何调整lable的字体大小?
  9. 选择排序 插入排序 交换排序
  10. 「LibreOJ Round #11」Misaka Network 与求和(杜教筛 + Min_25)