Luogu P2324 [SCOI2005]骑士精神 搜索
刚开始写了个没迭代的。。。结果过了$qwq$
然后迭个代。。更快了。。
#include<cstdio>
#include<iostream>
#define R register int
using namespace std;
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
}
const int D[][]=
{{,,,,},
{,,,,},
{,,-,,},
{,,,,,},
{,,,,}
};
const int dx[]={,,,,-,-,-,-},dy[]={,,-,-,-,-,,};
int T,a[][],ans,xx,yy,mxd;
inline int calc() { R ret=;
for(R i=;i<=;++i) for(R j=;j<=;++j) ret+=(a[i][j]!=D[i][j]); return ret;
}
inline bool ck(int x,int y) {return x<||x>||y<||y>;}
inline void dfs(int stp,int x,int y,int pre) { R tmp=calc();
if(stp+tmp>mxd) return ;
if(tmp==) {ans=min(ans,stp-); return ;}
for(R i=;i<=;++i) {
if(pre!=-&&(pre+)%==i) continue;
R X=x+dx[i],Y=y+dy[i];
if(ck(X,Y)) continue;
swap(a[x][y],a[X][Y]); dfs(stp+,X,Y,i);
swap(a[x][y],a[X][Y]);
}
}
signed main() {
T=g(); for(R i=;i<=T;++i) { ans=0x3f3f3f3f;
for(R i=;i<=;++i) for(R j=;j<=;++j) {
register char ch; while(ch=getchar(),ch!=''&&ch!=''&&ch!='*');
a[i][j]=ch-; if(ch=='*') xx=i,yy=j;
} for(mxd=;mxd<=&&ans==0x3f3f3f3f;++mxd) dfs(,xx,yy,-); if(ans!=0x3f3f3f3f) printf("%d\n",ans); else printf("-1\n");
}
}
2019.07.03
Luogu P2324 [SCOI2005]骑士精神 搜索的更多相关文章
- [luogu P2324] [SCOI2005]骑士精神
[luogu P2324] [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1 ...
- 【luogu P2324 [SCOI2005]骑士精神】 题解
题目链接:https://www.luogu.org/problemnew/show/P2324 不懂怎么剪枝,所以说,,我需要氧气.. 第一道A* // luogu-judger-enable-o2 ...
- 洛谷 P2324 [SCOI2005]骑士精神 解题报告
P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...
- P2324 [SCOI2005]骑士精神(A*)
P2324 [SCOI2005]骑士精神 A*与爆搜的不同就是它有一个估价函数$h(x)$ 这个估价函数一般设为从当前状态到终点状态的估计最短步数,这样可以有效剪枝 但估计值必须严格小于等于实际剩余步 ...
- 【题解】P2324 [SCOI2005]骑士精神
·有关IDA* 是带有估值函数的迭代加深搜索,表现出出色的效率. 估值函数可以简单的定义为「已经到位的骑士的个数」. 然后就是普通的迭代加深了. 算法酷炫不一定赢,搜索好才是成功. ——Loli Co ...
- [BZOJ1085][SCOI2005]骑士精神 搜索
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1085 大的思路是迭代加深搜索,我们加一个明显的剪枝,当棋盘中位置不对的骑士的数目加上已经走 ...
- Luogo P2324 [SCOI2005]骑士精神
所有想练习A*的人都先来敲一下这道题吧. 数据范围即便只有5*5,但朴素的爆搜还是会超时. 因此考虑剪枝. 对于这道题,肯定只要进行最优化剪枝,判断现在走的步数+剩下最少要走的步数,如果大于ans或者 ...
- P2324 [SCOI2005]骑士精神
题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位.两组数据之间没有空行. 输出格式 ...
- 洛谷 P2324 [SCOI2005]骑士精神
题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位.两组数据之间没有空行. 输出格式 ...
随机推荐
- LUA的table实现
数据结构 下面的结构体是lua中所定义的table typedef struct Table { CommonHeader; lu_byte flags; /* 1<<p means ta ...
- Python面向对象中的继承、多态和封装
Python面向对象中的继承.多态和封装 一.面向对象的三大特性 封装:把很多数据封装到⼀个对象中,把固定功能的代码封装到⼀个代码块, 函数,对象, 打包成模块. 这都属于封装思想. 继承:⼦类可以⾃ ...
- 在windows部署service
首先,需要在环境变量的path中加入Install Util的路径: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 注意这里的Framework\v2.0 ...
- POJ1845Sumdiv题解--约数之和
题目链接 https://cn.vjudge.net/problem/POJ-1845 分析 \(POJ\)里的数学题总是这么妙啊 首先有一个结论就是\(A=\prod{ \ {p_i}^{c_i} ...
- JavaScript基本使用
基本使用 1.JavaScript组成 ECMAScript+BOM+DOM BOM的思想(重点) DOM的思想(重点) 2.使用<script></script>标签 doc ...
- [LeetCode] 40. Combination Sum II ☆☆☆(数组相加等于指定的数)
https://leetcode.wang/leetCode-40-Combination-Sum-II.html 描述 Given a collection of candidate numbers ...
- 了解jQuery的detach()和remove()
jQuery中提供了两种移出一个DOM元素的方法detach()和remove(),虽然是一样的功能,但是给出两种方法,必然有它的不同之处. empty() 单独说一下 ,它删除当前元素的所有子元素, ...
- 使用Google Thumbnails 压缩图片
背景说明:最近项目中需要用到一些图片文件的上传 ,但是有些图片很大,比如轮播图,大有的有几兆,这样加载一个首页都要很久,显然这样对用户体验是非常不友好的,对服务器资源将是一种浪费. 为了解决这个问题, ...
- OverflowError:django signed integer is greater than maximum 数据库日期字段相关错
使用django中的默认数据库sqlite3, 在pycharm中录入日期字段相关信息结果出现问题 在保存的时候如图 直接在界面选择的日期变成了时间戳, 并且在获取数据的时候报错 经过查询之后(舔大佬 ...
- 九:MVC主从表数据加载
EF对关联表数据加载的三种方式: 延迟加载:只有在需要的时候加载数据.EF默认的加载方式. 贪婪加载:一次性组织好数据,全部加载到内存中. 显式加载:需要通过代码手动加载关联表. 延迟加载 virtu ...