# 解题思路

这题不难,主要就是考虑如何判重,如果直接在 $9$ 个位置上都比较一遍的话。你会得到下面的好成绩

所以考虑另一种方法:

将九个位置压成一个整数,并且因为只有九个数,所以不会超出 $int$,用 $set$ 判重,写一个 BFS 就过了

# 附上代码

#include<iostream>
#include<cstdio>
#include<queue>
#include<set>
using namespace std;
struct node{
int map,zerox,zeroy,step;
};
int pos=;
queue<node>P;
set<int>S;
int dx[]={,,,-};
int dy[]={,-,,};
void bfs(node now)
{
while(!P.empty())
{
node now=P.front();
P.pop();
int map=now.map,x=now.zerox,y=now.zeroy,step=now.step;
if(map==pos)
{
printf("%d",step);
return ;
}
int nxt[][],k=map;
for(int i=;i<;i++)
{
int xx=dx[i]+x,yy=dy[i]+y;
if(xx>&&xx<&&yy>&&yy<)
{
k=map;
for(int i=;i>=;i--)
for(int j=;j>=;j--)
nxt[i][j]=k%,k/=;
nxt[x][y]=nxt[xx][yy],nxt[xx][yy]=;
int ps=,h[],o[];
for(int i=;i<=;i++)
for(int j=;j<=;j++)
ps=ps*+nxt[i][j],h[nxt[i][j]]=i,o[nxt[i][j]]=j;
if(!S.count(ps))
{
S.insert(ps);
P.push((node){ps,h[],o[],step+});
}
}
}
}
}
int main()
{
char p;
int m=,x0,y0;
//scanf("%d",m);
for(int i=;i<=;i++)
{
for(int j=;j<=;j++)
{
cin>>p;
m=(p-'')+m*;
if(p=='') x0=i,y0=j;
}
}
S.insert(m);
P.push((node){m,x0,y0,});
bfs(P.front());
}

最新文章

  1. (转载)Win8.1的版本
  2. Asp.net 面向接口可扩展框架之消息队列组件
  3. php常见问题
  4. redis 常用命令
  5. Selenium2+python自动化23-富文本(自动发帖)
  6. navicat 或者workbench 无法连接127.0.0.1(61)的解决方法
  7. Unity3D脚本中文系列教程(五)
  8. Android开发全套视频教程在线观看网盘下载
  9. 【算法入门】广度/宽度优先搜索(BFS)
  10. PVPlayer的实现方式
  11. 在Windows上使用Ubuntu共享的打印机
  12. C#复习资料
  13. 启动eclipse时出现“Failed to load the JNI shared library jvm.dll”错误及解决
  14. jmeter正则表达式提取器提取特定字符串后的全部内容
  15. 伪类选择器 E:nth-child(n)、E:nth-of-type(n)
  16. input 子系统架构总结【转】
  17. 普通new和placement new的重载
  18. Javascript、Jquery获取浏览器和屏幕各种高度宽度[mark]
  19. DirectoryEntry_Properties属性的遍历(win2008)
  20. RMySQL数据库编程指南

热门文章

  1. ubuntu12.04中极品五笔简体繁体切换
  2. svn报错:privious operation has not finshed;run &#39;cleanup&#39; if it was interrupted
  3. 在ios Xcode10下小白都能解决library not found for -libstdc++.6.0.9
  4. A joke about regular expression
  5. jenkins软件工具部署
  6. 转 windows10 U盘系统启动盘怎么制作
  7. php中除法取整的方法(round,ceil,floor)
  8. 萌新--关于vue.js入门及环境搭建
  9. Asp.Net中调用存储过程并返回输出参数
  10. 掌握Spark机器学习库-07.6-线性回归实现房价预测