1085: [SCOI2005]骑士精神
A*搜索。
A*搜索的基础百度百科(实在偷懒没看论文之类的),在这里不说了。
A*搜索很关键的是h(n)估价函数的选取(表示现在到结束节点需要的距离)
设d(n)为实际到结束节点的距离。h(n)<=d(n)就又不会丢掉最优解,又可以中途就排除很多不行的答案。
bfs就是一个h(n)=0的A*搜索。。。。。(所有状态都会被加进去,错的离谱的也要)。。。。。
好感人。。。。
。。。说到哪了。。。。
如果俩个状态有n个不一样的地方,至少要走n-1步,这个估价函数相当好。
在这个程序具体实现中dep=d时,其实已经走了(d+1)步。。所以估价函数不用-1.
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- using namespace std;
- const int dx[]={2,1,-1,-2,-2,-1,1,2},dy[]={1,2,2,1,-1,-2,-2,-1};
- char EndStatus[5][10] = {
- "11111",
- "01111",
- "00*11",
- "00001",
- "00000", };
- struct Status {
- char a[5][6];
- int x,y;
- bool operator ==(Status b) {
- for(int i=0;i<5;i++)
- for(int j=0;j<5;j++)
- if(a[i][j] != b.a[i][j]) return false;
- return true;
- }
- int differ(Status b) {
- int res=0;
- for(int i=0;i<5;i++)
- for(int j=0;j<5;j++)
- if(a[i][j] != b.a[i][j]) res++;
- return res;
- }
- Status step(int d) {
- Status res=*this;
- res.x=x+dx[d],res.y=y+dy[d];
- if(res.x<0 || res.x>4 || res.y<0 || res.y>4) return *this;
- swap(res.a[x][y],res.a[res.x][res.y]);
- return res;
- }
- void get() {
- for(int i=0;i<5;i++) {
- scanf("%s",a[i]);
- for(int j=0;j<5;j++) if(a[i][j]=='*') {
- x=i; y=j;
- }
- }
- }
- void get(char b[5][10]) {
- for(int i=0;i<5;i++)
- for(int j=0;j<5;j++) {
- a[i][j]=b[i][j];
- if(a[i][j]=='*') {x=i; y=j;}
- }
- }
- }Start,End,t;
- int lim,T;
- bool dfs(int dep,Status s) {
- if(dep==lim) return s==End;
- for(int d=0;d<8;d++) {
- t=s.step(d);
- if(!(t==s) && dep+t.differ(End)<=lim) if(dfs(dep+1,t)) return true;
- }
- return false;
- }
- int main() {
- End.get(EndStatus);
- scanf("%d",&T);
- while(T--) {
- Start.get();
- for(lim=0;lim<=15;lim++) if(dfs(0,Start)) break;
- printf("%d\n",lim>15 ? -1 : lim);
- }
- return 0;
- }
1085: [SCOI2005]骑士精神的更多相关文章
- BZOJ 1085: [SCOI2005]骑士精神( IDDFS + A* )
一开始写了个 BFS 然后就 T 了... 这道题是迭代加深搜索 + A* -------------------------------------------------------------- ...
- BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2838 Solved: 1663 [Submit][St ...
- Bzoj 1085: [SCOI2005]骑士精神 (dfs)
Bzoj 1085: [SCOI2005]骑士精神 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 dfs + 剪枝. 剪枝方法: ...
- BZOJ(7) 1085: [SCOI2005]骑士精神
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3233 Solved: 1911[Submit][Stat ...
- 【BZOJ】1085: [SCOI2005]骑士精神(A*启发式搜索)
http://www.lydsy.com/JudgeOnline/problem.php?id=1085 囧啊囧,看了题解后写了个程序,但是样例总过不了T+T,调试了不下于1个小时,肉眼对拍看了根本看 ...
- bzoj 1085: [SCOI2005]骑士精神
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士,且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵 ...
- 1085. [SCOI2005]骑士精神【IDA※】
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2 ...
- [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]
题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...
- [BZOJ 1085][SCOI2005]骑士精神(IDA*)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1085 分析: 首先第一感觉是宽搜,但是空间需要8^15*5*5,明显不够,又鉴于最大深 ...
- 【BZOJ】1085: [SCOI2005]骑士精神
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1085 $${if (cs+val-1>ans) return ;}$$ #inclu ...
随机推荐
- Unity3D 利用NGUI2.6.3做技能冷却的CD效果
转自http://blog.csdn.net/qqmcy/article/details/9469021 NGUI非常强大我们今天来学习一下,如何利用NGUI做技能冷却的CD效果.先导入NGUI的插件 ...
- Careercup - Facebook面试题 - 5188884744896512
2014-05-02 07:18 题目链接 原题: boolean isBST(const Node* node) { // return true iff the tree with root 'n ...
- Query classification; understanding user intent
http://vervedevelopments.com/Blog/query-classification-understanding-user-intent.html What exactly i ...
- InnoDB与UUID
CakePHP本身有一个uuid实现,所以一直以来,我都在尝试使用uuid做主键的可能性.虽然MySQL是我最常用的数据库,但是和 auto_increment_int主键相比,我对uuid主键更有好 ...
- check environment var
田+R cmd set XXX check environment var
- Ubuntu下非常给力的下载工具--uget+aria2
转自Ubuntu下非常给力的下载工具--uget+aria2 Windows下的下载工具--迅雷,之所以下载速度快,乃是它能搜索资源.为己所用,而不是仅仅从原始地址这单一资源处下载. Ubuntu下也 ...
- Dijsktra算法C++实现
Dijsktra算法解决了有向图G=(V,E)上带权的单源最短路径问题.但要求所有边的权值非负. 思想:Dijkstra算法中设置了一顶点集合S,从源点s到集合中的顶点的最终最短路径的权值均已确定.算 ...
- Javascript的9张思维导图学习
思维导图小tips:思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来 ...
- poj 3358 Period of an Infinite Binary Expansion
由乘2取整得到分数的小数位,可以找到规律!!! 例如:1/10,2/10,4/10,8/10,16/10,32/10,64/10…… 取整后:1/10,2/10,4/10,8/10,6/10,2/10 ...
- C++primer中的TextQuery(读取文本)
本题目对应于 C++primer(第四版)中 第十章的文本查询类(TextQuery) 用到的知识有: 顺序容器 vector 关联容器 set,map 标准输入输出流,文件流,字符串流 //写一个文 ...