#include<iostream>
#include<bits/stdc++.h>
using namespace std;
#include<vector>
using std::vector;
bool t[];
int a[][];
int ans=;
int tx[]={,,,-,};
int ty[]={,-,,,};
int pc[];
int zt=;
int erfen(int a)
{
int ans=-;
int l=,r=zt,mid=(l+r)/;
while(l<=r)
{
if(pc[mid]>a)
{
r=mid-;
mid=(l+r)/;
}
if(pc[mid]<a)
{
l=mid+;
mid=(l+r)/;
}
if(pc[mid]==a)
{
ans=mid;
return ans;
}
}
return ans;
}
void bfs(int x,int y,int a[][],int sum)
{ if(erfen(a[][]*+a[][]*+a[][]*
+a[][]*+a[][]*+a[][]*+a[][]*+a[][]*
+a[][])!=-) return ;//如果重复了,直接退出(删除节点)
if(a[][]*+a[][]*+a[][]*
+a[][]*+a[][]*+a[][]*+a[][]*+a[][]*
+a[][]==)
{
if(sum<ans) ans=sum;
cout<<"youyigejie"<<endl;
return ;
} //判断是否目标状态
sum++;
pc[++zt]=a[][]*+a[][]*+a[][]*
+a[][]*+a[][]*+a[][]*+a[][]*+a[][]*
+a[][];
sort(pc,pc++zt);
for(int i=;i<=;i++)
if(tx[i]+x>=&&tx[i]+x<=&&ty[i]+y>=&&ty[i]+y<=)
{
int t[][];
for(int i=;i<=;i++)
for(int j=;j<=;j++)
t[i][j]=a[i][j];
t[x][y]=t[tx[i]+x][ty[i]+y],t[tx[i]+x][ty[i]+y]=;
if(erfen(t[][]*+t[][]*+t[][]*
+t[][]*+t[][]*+t[][]*+t[][]*+t[][]*
+t[][])==-)bfs(x+tx[i],y+ty[i],t,sum); }
}
int main()
{ int x,y;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
cin>>a[i][j];
if(a[i][j]==) x=i,y=j;
}
bfs(x,y,a,);
cout<<ans<<endl;
return ;
}

P1379 八数码难题的更多相关文章

  1. 洛谷 P1379 八数码难题 解题报告

    P1379 八数码难题 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初 ...

  2. 洛谷——P1379 八数码难题

    P1379 八数码难题 双向BFS 原来双向BFS是这样的:终止状态与起始状态同时入队,进行搜索,只不过状态标记不一样而已,本题状态使用map来存储 #include<iostream> ...

  3. [luogu]P1379 八数码难题[广度优先搜索]

    八数码难题 ——!x^n+y^n=z^n 我在此只说明此题的一种用BFS的方法,因为本人也是初学,勉勉强强写了一个单向的BFS,据说最快的是IDA*(然而蒟蒻我不会…) 各位如果想用IDA*的可以看看 ...

  4. 洛谷P1379八数码难题

    题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中. 要求解的问题是:给出一种初始布局(初始状态)和目标布局(为 ...

  5. 洛谷 P1379 八数码难题 Label:判重&&bfs

    特别声明:紫书上抄来的代码,详见P198 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给 ...

  6. 【洛谷】P1379 八数码难题(bfs)

    题目 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局 ...

  7. 洛谷 P1379 八数码难题

    题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...

  8. 洛谷 - P1379 - 八数码难题 - bfs

    https://www.luogu.org/problemnew/show/P1379 #include <bits/stdc++.h> using namespace std; #def ...

  9. 洛谷—— P1379 八数码难题

    https://daniu.luogu.org/problem/show?pid=1379 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示 ...

  10. luogu P1379 八数码难题

    题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了 ...

随机推荐

  1. Android实现身份证拍摄框

    http://blog.csdn.net/lhbtm/article/details/55505668 最近项目需要实现身份证拍照的功能,系统的相机并不能满足需求,故需要自定义相机,先上效果图,使用了 ...

  2. 修改UIView的backedlayer为CAShapeLayer

    修改UIView的backedlayer为CAShapeLayer 什么叫backedlayer呢?backedlayer指的是一个View在创建好的时候就已经帮你创建好了一个与View大小一致的CA ...

  3. 【MyBatis】MyBatis实现CRUD操作

    1.实现基本CRUD功能 使用MyBatis对数据完整的操作,也就是CRUD功能的实现.根据之前的内容,要想实现CRUD,只需要进行映射文件的配置. 范例:修改EmpMapper.xml文件,实现CR ...

  4. Connection to linux server with ORACLE SQL DEVELOPER

    1.Link name is random 2.username and password is database account 3.host name  is ip address  ifconf ...

  5. 沉淀再出发:spring boot的理解

    沉淀再出发:spring boot的理解 一.前言 关于spring boot,我们肯定听过了很多遍了,其实最本质的东西就是COC(convention over configuration),将各种 ...

  6. HDBn编解码原理 n阶高密度双极性码

    /*------------------------------------------------------------------ HDB3 编码解码原理    // 转载 ---------- ...

  7. java查找字符串里与指定字符串相同的个数

    public class EmployeeDemo { //方法一: public int search(String str,String strRes) {//查找字符串里与指定字符串相同的个数 ...

  8. angularJs中的模块化操作

    一.全局的写法 有可能会跟其他程序有冲突 <!DOCTYPE HTML> <html ng-app="myApp"> <head> <me ...

  9. CentOS学习:第一天

    阿里的一台ECS还有一个月到期,就趁这一个月的时间,用它来学习一下梦寐已久的CentOS. 由于历史原因,一直使用Windows环境,还从没接触过任何一种Linux系统. 在服务器端部署MySQL/T ...

  10. eclipse导出maven依赖的jar包

    一.导出到默认目录 targed/dependency 1.从Maven项目中导出项目依赖的jar包:进入工程pom.xml 所在的目录下,执行如下命令: mvn dependency:copy-de ...