题目大意:
在成功地发明了魔方之后,拉比克先生发明了它的二维版本,称作魔板。这是一张有8个大小相同的格子的魔板:
1 2 3 4
8 7 6 5
我们知道魔板的每一个方格都有一种颜色。这8种颜色用前8个正整数来表示。可以用颜色的序列来表示一种魔板状态,规定从魔板的左上角开始,沿顺时针方向依次取出整数,构成一个颜色序列。对于上图的魔板状态,我们用序列(1,2,3,4,5,6,7,8)来表示。这是基本状态。 这里提供三种基本操作,分别用大写字母“A”,“B”,“C”来表示(可以通过这些操作改变魔板的状态):
“A”:交换上下两行;
“B”:将最右边的一列插入最左边;
“C”:魔板中央四格作顺时针旋转。
  下面是对基本状态进行操作的示范:
A: 8 7 6 5
1 2 3 4
B: 4 1 2 3
5 8 7 6
C: 1 7 2 4
8 6 3 5
对于每种可能的状态,这三种基本操作都可以使用。
你要编程计算用最少的基本操作完成基本状态到目标状态的转换,输出基本操作序列。目标状态为八个数,a[i]表示第i位的目标状态。

基本状态必为12345678
所有整数范围均在1~8

题解:
广搜+hash:
这题的变化可以发现只有8!的情况总数,所以用hash判断当前搜的结果是否已经被遍历过,可以极大的优化时间,注意字符串的长度要限制,不要会炸内存= =
然后搜索有个预处理,你可以预判他每次操作以后,当前这个位置会被移到哪个位置,这时候开个rule表示当前数字做了i操作会被移到什么位置。
然后就是广搜= =深搜有很大可能栈溢出或者死循环到炸,所以不建议采取。

constmodn=1000007;rule:array[1..3,1..8] of byte=((8,7,6,5,4,3,2,1),(4,1,2,3,6,7,8,5),(1,7,2,4,5,3,6,8));varstate,hash:array [0..modn] of string[8];f,w:array [0..modn] of longint;i,x,ans:longint;p,s:string;function find(st:string):boolean;
vari:longint;
beginval(st,i);i:=i mod modn;while (hash[i]<>'') and (hash[i]<>st)  and (i<modn) do inc(i);if hash[i]=''then begin hash[i]:=st; exit(false); endelse exit(true);end;procedure print(t:longint);
beginif t=1 then exit;inc(ans);s:=chr(64+w[t])+s;print(f[t]);
end;procedure bfs;
varhead,tail,i,j:longint;
beginhead:=0; tail:=1;w[1]:=0; f[1]:=0;state[1]:='12345678';if state[1]=p then exit;repeatinc(head);for i:=1 to 3 dobegininc(tail);f[tail]:=head;w[tail]:=i;state[tail]:=state[head];for j:=1 to 8 dostate[tail,j]:=state[head,rule[i,j]];if find(state[tail]) then dec(tail);if state[tail]=p thenbeginprint(tail);tail:=0;exit;end;end;until head>=tail;
end;beginp:='';for i:=1 to 8 dobeginread(x);p:=p+chr(48+ord(x));end;bfs;writeln(ans);writeln(s);
end.

USACO 3.2 Magic Squares 魔板相关推荐

  1. USACO 3.2 Magic Squares 魔板 (BFS-HASH)

    题意: 给定1234/换行/5678,用下面几种方法变到制定的数 "A":交换上下两行: "B":将最右边的一列插入最左边: "C":中央四 ...

  2. Magic Squares 魔板 (BFS+HASH)

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

  3. [USACO3.2]Magic Squares 魔板

    题目大意 给出一个2*4的矩阵,有3种基本操作 A B C 交换上下两行 将最右边的一列插入最左边 中央四格作顺时针旋转 基本状态: 1 2 3 4 8 7 6 5 给定一个目标状态,求最少的基本操作 ...

  4. 魔板 Magic Squares(bfs优化)

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

  5. [USACO3.2]魔板 Magic Squares

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

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

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

  7. P2730 魔板 Magic Squares

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

  8. java51游戏_Java作业实践(一)魔板游戏

    课题:魔板游戏 一.课设要求 1.基本功能 (1)游戏规则 一个3×3的魔板,有一个格子是空的,其他格子内随机放置1-8共8个编号的方块,通过单击任意一个与空格子相邻的方块可以把该方块移入空格子,不断 ...

  9. 【题解】Luogu P2730 魔板

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

最新文章

  1. mormot支持websocket
  2. 利用rfcomm实现树莓派与手机通信_工业物联网 | 怎么用NodeRed实现树莓派与阿里云物联网平台通信?虹科告诉你!...
  3. 互联网前景如何,还值得进入嘛?
  4. python中or是什么意思-Python 中 (,|)和(and,or)之间的区别
  5. 高可用集群HA基本知识概述
  6. 函数无法识别_IF函数初级用法之一
  7. stagefright概述
  8. Power BI Desktop 中的数据源
  9. 简单管理Android手机程序的小程序
  10. uchome登陆机制分析(三)
  11. numpy多维数据存取
  12. centos 7安装matlab的两种方法(桌面安装和命令行安装)
  13. MapBoxSDK导入高版本unity2020、2021报错ARBackgroundRenderer
  14. 大数据告诉你,30年来有多少中国人移民美国
  15. springboot整合webSocket(看完即入门)
  16. die查壳工具 使用教程
  17. 重装和重装后该怎么办(通用版)
  18. 学计算机怎么写能力,计算机专业能力怎么写
  19. 回测平台小例子BKT:收盘前2分钟买,第二天卖
  20. MPC-M601 10Mbit/s高速逻辑门光电耦合器 代替LTV-M601

热门文章

  1. Wordpress搭建笔录
  2. 2022到2023基于java+微信小程序毕业设计课题参考
  3. 设计模式——观察者(监听者,订阅)模式||线程安全||c++详解
  4. 计算机专业学微积分有什么用,学微积分有什么用啊?
  5. VBS上传文件(转载)
  6. 【摘记】ABD-Net: Attentive but diverse Person Re-Id
  7. android打印机没反应了,使用蓝牙打印机在Android中打印不起作用
  8. 数据页和数据行(第八周翻译)
  9. 一种简单的2D Roguelike地图生成算法
  10. 用python爬取全国和全球疫情数据,并进行可视化分析(过程详细代码可运行)