这个题真是。。。

不想说什么了,及其复杂和烦人的一道题。基础思路就是bfs,用两个队列分别进行0的位置的计算和每一步的状态。。然而这个题最重要的一点在于判重,实际上可以康托展开用全排列的个数进行判重,这样也貌似好操作一些,但是时间短技术差想不到怎么办,通过计算空间,我们发现,可以暴力开一个9维bool数组进行暴力判重,至于怎么判也就不需要多说了,这种状态出现过就可以了。

###错误点1:bool数组不打标记,一直mle。。。

###错误点2:居然会有一开始就是目标状态的点。。。没有特判。。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define re register
#define ll long long
using namespace std;
short n,m,ans,t,d,l,h[][],x[][][];
int dx[]={,,,-,};
int dy[]={,,,,-};
char a[][];
bool b[][][][][][][][][];
int main()
{
for(int i=;i<;i++)
{
for(int j=;j<;j++)
{
cin>>a[i][j];
x[][i][j]=a[i][j]-'';
if(a[i][j]=='')
{
h[][]=i;
h[][]=j;
}
}
}
int head=,tail=;
if(x[tail][][]==&&x[tail][][]==&&x[tail][][]==&&x[tail][][]==&&x[tail][][]==&&x[tail][][]==&&x[tail][][]==&&x[tail][][]==&&x[tail][][]==)
{
cout<<;
return ;
}
h[][]=;
while(head<tail)
{
int nx=h[++head][];
int ny=h[head][];
int dep=h[head][];
for(re int i=;i<=;i++)
{
int tx=nx+dx[i];
int ty=ny+dy[i];
if(tx>=&&tx<&&ty>=&&ty<)
{
h[++tail][]=tx;
h[tail][]=ty;
h[tail][]=dep+;
for(re int j=;j<;j++)
{
for(re int k=;k<;k++)
{
x[tail][j][k]=x[head][j][k];
}
}
x[tail][nx][ny]=x[tail][tx][ty];
x[tail][tx][ty]=;
if(b[x[tail][][]][x[tail][][]][x[tail][][]][x[tail][][]][x[tail][][]][x[tail][][]][x[tail][][]][x[tail][][]][x[tail][][]])
{
tail--;
continue;
}
b[x[tail][][]][x[tail][][]][x[tail][][]][x[tail][][]][x[tail][][]][x[tail][][]][x[tail][][]][x[tail][][]][x[tail][][]]=;
if(x[tail][][]==&&x[tail][][]==&&x[tail][][]==&&x[tail][][]==&&x[tail][][]==&&x[tail][][]==&&x[tail][][]==&&x[tail][][]==&&x[tail][][]==)
{
cout<<dep+;
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 八数码难题

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

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

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

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

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

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

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

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

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

随机推荐

  1. ionic + cordova 环境搭建

    1.安装nodejs:官网下载安装包,双击安装即可.成功后在控制台输入node -v 显示版本号即成功. 2.安装Java,配置环境变量,下载安卓sdk ,配置环境变量 ANDROID_HOME 为s ...

  2. 信息属性列表关键字 info.plist

    本文转载至  http://blog.csdn.net/zaitianaoxiang/article/details/6650491 本附录说明了那些可以在束和包的属性列表文件中定义的关键字. 束关键 ...

  3. CMU-15445 LAB3:事务隔离,two-phase locking,锁管理器

    概述 本lab将实现一个锁管理器,事务通过锁管理器获取锁,事务管理器根据情况决定是否授予锁,或是阻塞等待其它事务释放该锁. 背景 事务属性 众所周知,事务具有如下属性: 原子性:事务要么执行完成,要么 ...

  4. 【BZOJ1053】[HAOI2007]反素数ant 暴力

    [BZOJ1053][HAOI2007]反素数ant Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) ...

  5. java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x87<b

    实际开发中遇到的 情景: 解决方案:  复制的别人的博客,没测试, Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1 这个 ...

  6. Django 视图系统(views)

    介绍 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图 ...

  7. android自定义控件(三)ProgressBar

     1.ProgressBar有两个进度,一个是android:progress,另一个是android:secondaryProgress.比如视频的缓存进度以及播放进度. 在这里缓存的进度就可以是a ...

  8. 理解java注解

    @是java注解,即annotation. 注解功能可以理解为插件,是代码级别的插件,在类的方法上写:@XXX,就是在代码上插入了一个插件. Java注解是附加在代码中的一些元信息,用于一些工具在编译 ...

  9. MySQL学习思维导图

    结束:分享在线下载地址 https://www.xmind.net/m/7t6U/

  10. corethink功能模块探索开发(三)让这个模块可见

    感觉corethink把thinkphp的思想复用到淋漓尽致. 1.把opencmf.php文件配置好了后台该模块的菜单就能在安装后自动读取(分析好父子关系,否则页面死循环,apache资源占用率10 ...