#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. 【MFC】转:在CHtmlView中判断页面加载完成

    在列出别人的代码前,记录下自己的,覆盖父类的OnNavigateComplete2函数即可. typedef struct _tagEventURL { CString strUrl; HANDLE ...

  2. ORM的补充

    之前学习的orm的操作类似: create delete update filter/all exclude values values_list get first last order_by 补充 ...

  3. 文件复制(shutil)

    import shutil #拷贝整个目录树 shutil.copytree('d:\\aaa','e:\\aaa') #目标文件夹(e:\aaa)必须不存在 shutil.rmtree('e:\\a ...

  4. vSan中见证组件witness详解

    witness在vSan中作为见证组件其作用类似于WinServer中的仲裁磁盘,当Cluster中某一节点发生故障时,来判断该节点上的对象在哪一个新的节点上继续承载.此处需要强调的是,witness ...

  5. 沉淀再出发:dubbo的基本原理和应用实例

    沉淀再出发:dubbo的基本原理和应用实例 一.前言 阿里开发的dubbo作为服务治理的工具,在分布式开发中有着重要的意义,这里我们主要专注于dubbo的架构,基本原理以及在Windows下面开发出来 ...

  6. [EffectiveC++]item15:Provide access to raw resources in resource-managing class

    在资源管理类中提供对原始资源的访问

  7. 51nod 1437 迈克步

    题目链接 先利用单调栈or其他方法找到一个元素g[i]作为最小值的区间,设为[L, R]. 那么长度为R-L+1的组的最大值ans=max(ans,g[i]).但是有一个问题: 比如6这个元素是长度为 ...

  8. java String 常用方法集合

    String a = "abc";String b = "abc";a==b ;//返回true,因为a,b指向的是同一个地址 String a = new S ...

  9. java二维数组定义初始化-杨辉三角

    public class Array2Demo2_3 { public static void main(String[] args) { //定义初始化 int[][] arr = new int[ ...

  10. Asp.net & Aspose.cells 导入

    Workbook workBook = new Workbook(this.fuFile.FileContent); Aspose.Cells.Worksheet sheet = workBook.W ...