搜索水题。因为只有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

最新文章

  1. android studio 集成微信登录
  2. 递推 hdu 1396
  3. 奇异值分解(SVD)和简单图像压缩
  4. 【阿迪达斯 ZX850 系列】
  5. [UCSD白板题] Maximum Pairwise Product
  6. 自制简单的.Net ORM框架 (一) 简介
  7. Can&#39;t locate Switch.pm in @INC
  8. [转载]Web前端和后端之区分,以及面临的挑战【转】
  9. Scala入门系列(八):面向对象之trait
  10. Bzoj4566:[HAOI2016]找相同字符
  11. 求二叉树第n层节点数
  12. 自己实现memcpy,strcpy与strncpy
  13. 细说REST API安全之概述
  14. IOS xib和代码自定义UIView
  15. MySQL Community Server 8.0.11下载与安装配置
  16. 福大软工 &#183; BETA 版冲刺前准备
  17. python对象转字典
  18. 559. N叉树的最大深度
  19. C语言 &#183; 数对
  20. echarts tooltip太多会超出显示范围-解决

热门文章

  1. AutoReplace in pl/sql developer
  2. 汉澳sinox2014x64server已经能够下载
  3. 赵雅智_ListView_SimpleAdapter
  4. Codeforces444A_DZY Loves Physics
  5. Cocos2d-x 3.0final 终结者系列教程13-贪食蛇游戏案例(全)
  6. 查找python项目依赖并生成requirements.txt——pipreqs 真是很好用啊
  7. CodeForces 596A
  8. 框架-Java:Spring MVC
  9. MySql查询系统时间,SQLServer查询系统时间,Oracle查询系统时间
  10. python字符串中的单双引