bzoj 1085 [SCOI2005]骑士精神——IDA*
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1085
迭代加深搜索。
估价函数是为了预计步数来剪枝,所以要优于实际步数。
没错,不是为了确定搜索顺序,而是为了可行性剪枝!这样的话-1的情况就不会很慢了。
这样的话估价函数也不能弄什么 每个不合法位置到最近合法位置的距离 或者 把这个距离/3当做步数 了呢……
总之估价函数弄成不合法位置的个数来表示预计步数是很好的。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<algorithm>
- using namespace std;
- int T,dist[][],kx,ky,lm,ans,pri;
- int cz[][]={,,-,-,-,-,,-,,-,,,,,-,,-,};
- char a[][];
- bool flag;
- int g0(int i,int j)
- {
- if(j<i||(i==&&j==)||(i==&&j==))return ;return ;
- }
- int g1(int i,int j)
- {
- if(j>i||(i==&&j==)||(i==&&j==))return ;return ;
- }
- int gx(int i,int j)
- {
- if(i==&&j==)return ;return ;
- }
- int g(int i,int j)
- {
- if(a[i][j]=='')return g0(i,j);if(a[i][j]=='')return g1(i,j);return gx(i,j);
- }
- void init()
- {
- pri=;//
- for(int i=;i<=;i++)
- for(int j=;j<=;j++)
- {
- pri+=g(i,j);if(a[i][j]=='*')kx=i,ky=j;
- }
- }
- bool pd(int x,int y,int k)
- {
- if(x+cz[k][]<=&&x+cz[k][]>=&&y+cz[k][]<=&&y+cz[k][]>=)return true;
- return false;
- }
- void dfs(int x,int y,int cnt,int base)
- {
- if(cnt==lm&&!base){flag=;ans=cnt;return;}
- if(cnt>=lm)return;
- for(int i=;i<=;i++) if(pd(x,y,i))
- {
- int tx=x+cz[i][],ty=y+cz[i][],val;
- if(a[tx][ty]=='')val=base-g0(tx,ty)-gx(x,y)+g0(x,y)+gx(tx,ty);
- else val=base-g1(tx,ty)-gx(x,y)+g1(x,y)+gx(tx,ty);
- if(val+cnt<=lm)
- {
- a[x][y]=a[tx][ty];a[tx][ty]='*';
- dfs(tx,ty,cnt+,val);
- a[tx][ty]=a[x][y];a[x][y]='*';
- if(flag)return;
- }
- }
- }
- int main()
- {
- scanf("%d",&T);
- while(T--)
- {
- for(int i=;i<=;i++)scanf("%s",a[i]+);
- init();flag=;
- for(lm=;lm<=;lm++)
- {
- dfs(kx,ky,,pri);if(flag)break;
- }
- if(flag)printf("%d\n",ans);else printf("-1\n");
- }
- return ;
- }
bzoj 1085 [SCOI2005]骑士精神——IDA*的更多相关文章
- [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]
题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...
- bzoj 1085: [SCOI2005]骑士精神 IDA*
题目链接 给一个图, 目标位置是确定的, 问你能否在15步之内达到目标位置. 因为只有15步, 所以直接ida* #include<bits/stdc++.h> using namespa ...
- Bzoj 1085: [SCOI2005]骑士精神 (dfs)
Bzoj 1085: [SCOI2005]骑士精神 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 dfs + 剪枝. 剪枝方法: ...
- 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]骑士精神
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士,且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵 ...
- [BZOJ 1085][SCOI2005]骑士精神(IDA*)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1085 分析: 首先第一感觉是宽搜,但是空间需要8^15*5*5,明显不够,又鉴于最大深 ...
- BZOJ.1085.[SCOI2005]骑士精神(迭代加深搜索)
题目链接 最小步数这类,适合用迭代加深搜索. 用空格走代替骑士. 搜索时记录上一步防止来回走. 不需要每次判断是否都在位置,可以计算出不在对应位置的骑士有多少个.而且每次复原一个骑士至少需要一步. 空 ...
- BZOJ 1085: [SCOI2005]骑士精神(A*算法)
第一次写A*算法(这就是A*?如果这就是A*的话,那不就只是搜索的一个优化了= =,不过h函数如果弄难一点真的有些难设计) 其实就是判断t+h(x)(t为当前步数,h(x)为达到当前状态的最小步数) ...
随机推荐
- Linux系统下wget命令的使用教程
一.Linux wget简介 wget是linux上的命令行的下载工具.这是一个GPL许可证下的自由软件.Linux wget支持HTTP和FTP协议,支持代理服务器和断点续传功能,能够自动递归远程主 ...
- canal入门使用
1.下载canal安装包: 地址:https://github.com/alibaba/canal/releases 图例: 2.将下载好的安装包复制到Linux,解压 3.修改配置文件 vi con ...
- vim与shell终端操作技巧
一.快速注释多行代码 1.添加//注释符 :10,50s#^#//#g 使用#作为分隔符 2.删除//注释符 :10,50s#^//##g 使用#作为分隔符 3.添加#注释符 ...
- mapreduce&GFS&bigtable learning
之前在学习udf的时候接触到了mapreduce,感觉很酷,于是学习了一下,看了mapreduce和GFS的论文,但是没有总结,只是看了一遍 准备利用在学校的时间,学习一下bigtable,然后再认真 ...
- js插件封装
插件封装原则 1.暴露出来的实例必须只能是一个 2.IIFE包裹 !执行包裹 函数作用域保护 3.实例化方法不要写在函数内 throw这个方法是报错
- 图示:DOM元素各种位置属性
- activity启动模式之singleInstance
activity启动模式之singleInstance 一.简介 Log.d("C2", getTaskId()+"");里面的getTaskId()可以获取a ...
- Python 乘法口诀表
环境 Anaconda3 Python 3.6, Window 64bit 目的 输出9*9 乘法口诀表 代码 # -*- coding: utf-8 -*- ''' 1*1=1 2*1=2 2*2= ...
- Spring mvc使用不了jstl 或者 Spring mvc不解析jstl
最近我搭了一个maven的springMVC的项目发现前端怎么也识别不了我的jstl,我查询了很多方法,导致这种情况的原因有很多 1.jar引用不对,maven中的正确导入可用的jar <dep ...
- sizeof结构体
规则1:结构体的对折长度为其基本数据成员的长度的最大值. 规则2:指定边界情况下,结构体的对折长度为自身对折长度和指定对折长度中较小者. 规则3:当行内结构体的基本数据成员的起始地址必须为其长度的整数 ...