搜索水题。因为只有8个数,排列一共有40320种,直接bfs,判重就行了。

但是判重的时候直接用8进制表示的话要88的bool数组。这种操作太low了,于是我们可以用康托展开,降成8!。

康托展开其实就是一个简单的公式,很好意会。。。。

#include <iostream>
#include <cstdlib>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std;
const int fac[]={,,,,,,,,,};
int rnk;
bool vis[];
struct Node{
int a[],step,pre;
char c;
}a,q[];
int cantor(Node b) {
int ans=;
for(int i=;i<=;i++) {
int cnt=;
for(int j=i+;j<=;j++) {
if(b.a[j]<b.a[i]) cnt++;
}
ans+=(cnt*fac[-i]);
}
return ans;
}
Node A(Node x) {
for(int i=;i<=;i++) swap(x.a[i],x.a[-i]);
return x;
}
Node B(Node x) {
swap(x.a[],x.a[]),swap(x.a[],x.a[]);
swap(x.a[],x.a[]),swap(x.a[],x.a[]);
swap(x.a[],x.a[]),swap(x.a[],x.a[]);
return x;
}
Node C(Node x) {
swap(x.a[],x.a[]),swap(x.a[],x.a[]),swap(x.a[],x.a[]);
return x;
}
int h,t;
void print(Node x) {
if(!x.pre) return;
print(q[x.pre]); printf("%c",x.c); }
void bfs() {
h++,t++;
for(int i=;i<;i++)q[].a[i]=i;
while(h<=t) {
bool flag=;
for(int i=;i<=;i++) if(q[h].a[i]!=a.a[i]) {flag=;break;}
if(flag) {printf("%d\n",q[h].step),print(q[h]);exit();}
Node tp;int kt;
tp=A(q[h]);kt=cantor(tp);
if(!vis[kt]){vis[kt]=;q[++t]=tp;q[t].step++,q[t].pre=h;q[t].c='A';}
tp=B(q[h]);kt=cantor(tp);
if(!vis[kt]){vis[kt]=;q[++t]=tp;q[t].step++;q[t].pre=h;q[t].c='B';}
tp=C(q[h]);kt=cantor(tp);
if(!vis[kt]){vis[kt]=;q[++t]=tp;q[t].step++;q[t].pre=h;q[t].c='C';}
h++;
}
}
int main() {
for(int i=;i<=;i++) scanf("%d",&a.a[i]);
bfs();
}

Magic Squares

[LUOGU2730] 魔板的更多相关文章

  1. Sicily 1051: 魔板(BFS+排重)

    相对1150题来说,这道题的N可能超过10,所以需要进行排重,即相同状态的魔板不要重复压倒队列里,这里我用map储存操作过的状态,也可以用康托编码来储存状态,这样时间缩短为0.03秒.关于康托展开可以 ...

  2. Sicily 1150: 简单魔板(BFS)

    此题可以使用BFS进行解答,使用8位的十进制数来储存魔板的状态,用BFS进行搜索即可 #include <bits/stdc++.h> using namespace std; int o ...

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

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

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

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

  5. [HDU 1430] 魔板

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

  6. hdu1430魔板(BFS+康托展开)

    做这题先看:http://blog.csdn.net/u010372095/article/details/9904497 Problem Description 在魔方风靡全球之后不久,Rubik先 ...

  7. Sicily1151:魔板搜索及优化

    最终优化代码地址: https://github.com/laiy/Datastructure-Algorithm/blob/master/sicily/1151.c 题目如下 Constraints ...

  8. 【USACO 3.2.5】魔板

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

  9. HDU_1430——魔板,预处理,康托展开,置换,string类的+操作

    Problem Description 在魔方风靡全球之后不久,Rubik先生发明了它的简化版——魔板.魔板由8个同样大小的方块组成,每个方块颜色均不相同,可用数字1-8分别表示.任一时刻魔板的状态可 ...

随机推荐

  1. ZooKeeper搭建系列集 (这套很全,也很详细)

    原文链接:http://blog.csdn.net/shatelang/article/details/7596007 本篇文章结构: 总共包括10个系列 ZooKeeper系列之一:ZooKeepe ...

  2. Android Studio 编译Gradle提示编码错误

    在Android Studio中,假设我们的代码有中文凝视.显示的时候全然正常,而编译的时候Gradle就会报错,可是又能够编译成功,并且Gradle报的错误信息,也是乱码! 这样我们就不好寻找错误原 ...

  3. BNU 34986 Football on Table

    "Bored? Let's play table football!" The table football is played on a rectangular table, u ...

  4. 简陋版:基于python的自动化测试框架开发

    项目背景: XXXX银行项目采用的是B/S架构,主要是为了解决银行业务中的柜员.凭证.现金.账务等来自存款.贷款.会计模块的管理. 手工弊端: 1.项目业务复杂度高,回归测试工作量大2.单个接口功能比 ...

  5. 将Latex tex文档转换成 word文档(上)

    有时候逼不得已,必须得将自己精心排版好的latex 文档 转换成word 给别人编辑 以下提供一个方法 下载 Tex2Word 工具,地址我的网盘 安装 解压后安装,使用默认安装路径 安装过程中.点击 ...

  6. SQL SERVER读书笔记:JOIN

    nested loop join:适用于小数据集,有索引的情况.不占用内存,不用tempdb. merge join:大数据,要排序,多对多,用tempdb: hash join:对大数据集,少用户使 ...

  7. 略过天涯 深入浅出VGA和DVI接口【转】

    本文转载自:http://www.cnblogs.com/lueguo/p/3373649.html 由CrazyBingo修改…… 前言:目前显示器的主流接口是VGA.DVI以及HDMI,再加上一个 ...

  8. 修改linux内核开机logo并居中全屏显示【转】

    本文转载自:http://blog.csdn.net/xuezhimeng2010/article/details/49299781 1.准备图片  使用ubuntu自带的绘图软件GIMP是最为快捷的 ...

  9. bzoj3673: 可持久化并查集 by zky&&3674: 可持久化并查集加强版

    主席树可持久化数组,还挺好YY的 然而加强版要路径压缩.. 发现压了都RE 结果看了看数据,默默的把让fx的父亲变成fy反过来让fy的父亲变成fx 搞笑啊 #include<cstdio> ...

  10. php错误抑制符

    php错误抑制符 简介 PHP 支持一个错误控制运算符:@.当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误信息都被忽略掉. @这个符号在Java里面是注解符号. 实例 <?ph ...