[Luogu2324]八数码难题
抱歉...我可能真的做搜索上瘾了...
还是IDA*,自己看看就好了...
注意一下搜索顺序
- #include<cstdio>
- #include<queue>
- #include<iostream>
- #include<cstring>
- using namespace std;
- inline int read(){
- int ans=,f=;char chr=getchar();
- while(!isdigit(chr)){if(chr=='-') f=-;chr=getchar();}
- while(isdigit(chr)){ans=(ans<<)+(ans<<)+chr-;chr=getchar();}
- return ans*f;
- }int a[][],x,y,ff;char chr;
- const int S[][]={{,,,},{,,,},{,,,},{,,,}},dx[]={,,-,},dy[]={,,,-};
- inline bool check(){
- for(int i=;i<=;i++)
- for(int j=;j<=;j++)
- if(S[i][j]!=a[i][j]) return ;
- return ;
- }inline bool test(int x,int y){int ans=;
- for(int i=;i<=;i++)
- for(int j=;j<=;j++)
- if(S[i][j]!=a[i][j])
- if(++ans+x>y) return ;
- return ;
- }void dfs(int stp,int x,int y,int depth,int lst){
- if(depth==stp){if(check()) ff=;return;}
- if(ff) return;
- for(int i=;i<;i++){
- int fx=x+dx[i],fy=y+dy[i];
- if(fx<||fy<||fx>||fy>||lst+i==) continue;
- swap(a[x][y],a[fx][fy]);
- if(test(stp,depth)&&!ff) dfs(stp+,fx,fy,depth,i);
- swap(a[x][y],a[fx][fy]);
- }
- }
- int main(){
- for(int i=;i<=;i++)
- for(int j=;j<=;j++){cin>>chr;if(chr=='') x=i,y=j;a[i][j]=chr-;}
- if(check()){puts("");return ;}
- int i=;
- while(i++){dfs(,x,y,i,-);if(ff){cout<<i;return ;}}
- return ;
- }
[Luogu2324]八数码难题的更多相关文章
- 双向广搜+hash+康托展开 codevs 1225 八数码难题
codevs 1225 八数码难题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Yours和zero在研究A*启 ...
- Codevs 1225 八数码难题
1225 八数码难题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Yours和zero在研究A*启发式算法.拿到一道经典的 ...
- [luogu]P1379 八数码难题[广度优先搜索]
八数码难题 ——!x^n+y^n=z^n 我在此只说明此题的一种用BFS的方法,因为本人也是初学,勉勉强强写了一个单向的BFS,据说最快的是IDA*(然而蒟蒻我不会…) 各位如果想用IDA*的可以看看 ...
- 洛谷P1379八数码难题
题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中. 要求解的问题是:给出一种初始布局(初始状态)和目标布局(为 ...
- 洛谷 P1379 八数码难题 解题报告
P1379 八数码难题 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初 ...
- 【洛谷P1379】八数码难题(广搜、A*)
八数码难题 题目描述 一.广搜: 首先要考虑用什么存每一个状态 显然每个状态都用一个矩阵存是很麻烦的. 我们可以考虑将一个3*3的矩阵用一个字符串或long long 存. 每次扩展时再转化为矩阵. ...
- 习题:八数码难题(双向BFS)
八数码难题(wikioi1225) [题目描述] 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出 ...
- 「LuoguP1379」 八数码难题(迭代加深
[P1379]八数码难题 - 洛谷 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种 ...
- 洛谷——P1379 八数码难题
P1379 八数码难题 双向BFS 原来双向BFS是这样的:终止状态与起始状态同时入队,进行搜索,只不过状态标记不一样而已,本题状态使用map来存储 #include<iostream> ...
随机推荐
- Cesium学习笔记(九):导入3D模型(obj转gltf)
在用cesium的过程中难免需要导入别人做好的3D模型,这时候就需要将这些模型转成gltf格式了 当然,官方也给了我们一个网页版的转换器,但是毕竟是网页版的,效率极其低下,文件还不能太大,所以我们就需 ...
- Typescript编译设置
TypeScript MSBuild编译选项,用记事本打开工程文件,进行修改,如<TypeScriptGeneratesDeclarations>true</TypeScriptGe ...
- 【XSY3413】Lambda - 造计算机初步——邱奇-图灵论题与lambda演算
题意: 关于邱奇-图灵论题的一点思考 这道题起源于计算机科学史上一个非常著名的问题——邱奇-图灵论题,这个论题是可计算性理论的基石,关于它的思考与证明几乎贯穿了整个计算机科学史,涵盖了数学.算法理论. ...
- colgroup 整行变色
<table border="2" width="100%"> <colgroup span="2" align=&quo ...
- Problem 30
Problem 30 https://projecteuler.net/problem=30 Surprisingly there are only three numbers that can be ...
- 洋葱浏览器(Tor Browser)
第一,洋葱路由器简介 Tor Browser 是個內建「翻牆」功能的網路瀏覽器,藉由「洋蔥路由, The Onion Router (Tor)」匿名瀏覽技術,將上網時所傳遞的訊息層層加密保護,讓使用者 ...
- 腾讯云&硬盘信息
fly@UBT-sCloud:~/pub_work/05-ARM/00-s5pv210$ sudo fdisk -lDisk /dev/ram0: 64 MiB, 67108864 bytes, 13 ...
- 洛谷 2387 NOI2014魔法森林 LCT
[题解] 我们先把边按照$a$值从小到大排序,并按照这个顺序加边. 如果当前要加入的边连接的两点$u$与$v$已经是连通的,那么直接加入这条边就会出现环.这时我们需要删除这个环中$b$值最大的边.因此 ...
- 学习记录--如何将exec执行结果放入变量中?
declare @num int, ) set @sqls='select @a=count(*) from tb ' exec sp_executesql @sqls,N'@a int output ...
- AIM Tech Round (Div. 2)——ABCD
http://codeforces.com/contest/624 A.python是用来写div2的AB题的... a, b, x, y = map(float, raw_input().split ...