USACO 3.2 Magic Squares 魔板 ssl 1692 BFS-HASH
来源:互联网 发布:淘宝头条写手工资 编辑:程序博客网 时间:2024/05/06 06:22
Description
在成功地发明了魔方之后,拉比克先生发明了它的二维版本,称作魔板。这是一张有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
对于每种可能的状态,这三种基本操作都可以使用。
你要编程计算用最少的基本操作完成基本状态到目标状态的转换,输出基本操作序列。
Input
只有一行,包括8个整数,用空格分开(这些整数在范围 1——8 之间),表示目标状态。
Output
Line 1: 包括一个整数,表示最短操作序列的长度。
Line 2: 在字典序中最早出现的操作序列,用字符串表示,除最后一行外,每行输出60个字符。
分析
只是一个很水的bfs+hash记录状态,一年前刷的。ps:不要在意一年的写的格式
代码
const b:array[1..3] of char=('A','B','C'); q=98763;var h:array[0..100000] of longint; a,c:array[1..100000] of longint; f,s3:array[1..100000] of char; n:longint;procedure init;var i,j:longint;begin n:=0; for i:=1 to 8 do begin read(j); n:=n*10+j; end;end;function hash(x:longint):longint;var i:longint;begin i:=x mod q; while (h[i]<>0)and(h[i]<>x) do i:=i mod (q+1)+1; hash:=i;end;procedure main;var i,j,k,l,p:longint; head,tail:longint; m,m1:array[1..8] of integer;begin head:=0; tail:=1; a[1]:=12345678; h[hash(12345678)]:=12345678; c[1]:=0; repeat head:=head+1; j:=a[head]; i:=8; while j<>0 do begin m1[i]:=j mod 10; j:=j div 10; i:=i-1; end; for i:=1 to 3 do begin m:=m1; case i of 1:begin l:=7; for j:=1 to 4 do begin k:=m[j]; m[j]:=m[j+l]; m[j+l]:=k; l:=l-2; end; end; 2:begin k:=m[4]; l:=m[5]; p:=1; for j:=4 downto 2 do begin m[j]:=m[j-1]; m[j+p]:=m[j+p+1]; p:=p+2; end; m[1]:=k; m[8]:=l; end; 3:begin k:=m[2]; m[2]:=m[7]; m[7]:=m[6]; m[6]:=m[3]; m[3]:=k; end; end; j:=1; k:=0; while j<>9 do begin k:=k*10+m[j]; j:=j+1; end; if h[hash(k)]<>k then begin tail:=tail+1; a[tail]:=k; f[tail]:=b[i]; h[hash(k)]:=k; c[tail]:=head; if k=n then begin j:=0; l:=tail; while l<>0 do begin j:=j+1; s3[j]:=f[l]; l:=c[l]; end; j:=j-1; writeln(j); l:=0; for p:=j downto 1 do begin l:=l+1; write(s3[p]); if l mod 60=0 then writeln; end; exit; end; end; end; until head>=tail;end;begin init; if n=12345678 then begin write(0); halt; end; main;end.
0 0
- USACO 3.2 Magic Squares 魔板 ssl 1692 BFS-HASH
- USACO 3.2 Magic Squares 魔板 (BFS-HASH)
- USACO 3.2 Magic Squares 魔板 (BFS-HASH)
- USACO 3.2 Magic Squares 魔板 (BFS-HASH)
- Magic Squares USACO 康托hash+BFS
- USACO-Section 3.2 Magic Squares(BFS)
- USACO 3.2 Magic Squares 魔板
- USACO-Magic Squares(bfs)
- usaco 3.2 Magic Squares
- usaco 3.2 Magic Squares
- usaco 3.2 Magic Squares
- 【USACO题库】3.2.5 Magic Squares魔板
- USACO 3.2.5 Magic Squares
- USACO 3.2 Magic Squares (msquare)
- [BFS][哈希]Magic Squares 魔板
- 【USACO题库】3.2.5 Magic Squares魔板(广搜)
- JZOJ1286.【USACO题库】3.2.5 Magic Squares魔板
- 1286. 【USACO题库】3.2.5 Magic Squares魔板 (Standard IO)
- poj2823 Sliding Window 单调队列
- 重写QTabWidget,在标签后面添加图标按钮
- openssl windows 编译 (总结)
- Git和SVN的比较
- 判断季节
- USACO 3.2 Magic Squares 魔板 ssl 1692 BFS-HASH
- Kafka介绍及环境搭建
- webview和js的交互,写的太好了
- 对最近Android项目中的视频编解码的总结
- 基于云端环境的多语言编程平台近期荣耀上市
- MYSQL数据库创建表分区
- ajax进入error()中 Access-Control-Allow-Origin
- linux svn客户端安装
- QTabWidget添加自定义样式