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)为达到当前状态的最小步数) ...
随机推荐
- Window修改git-bash默认路径
每次打开git-bash都默认到c盘,解决办法:修改git-bash的快捷方式 1. 删除目录后面的 --cd-to-home 2. 修改起始位置路径为你的项目路径 3. 还可以设置一个快捷键,在任何 ...
- java 枚举类型 enum
在java SE5中添加了枚举类型,即enum关键字.在这之前,当你需要创建一个整形常量集时,但是这些枚举值并不会必然的将其自身的取值限制在这个常量集的范围之内,因此这样做的显得不安全,也不方便使用. ...
- 记一次Configured Capacity: 0 (0 B)的解决
场景 最近hadoop集群新加了一个节点N,通过Ambari管理 一切正常. 过了两天发现,虽然集群每天要进几个G的数据(共8个节点),但节点N占用空间丝毫没有变化,显然没有进数据啊 日志 查看该节点 ...
- scala学习手记40 - 使用case类
前面两节我们已经多次接触过case关键字了.case关键字不仅可以用在match/case中来执行模式匹配,也可以用来修饰类.不过用case修饰的类也主要是用来做模式匹配.在上一节曾经提到过match ...
- c# 使用事务
EcAttendanceMatterBLL.OpenTransaction(); DbTransaction Tran = EcAttendanceMatterBLL.Transaction; _wf ...
- const对象 不能调用非const修饰的成员函数
class class UIRect:public RECT { public: UIRect(LONG leftT = 0, LONG topT = 0, LONG rightT = 0, LONG ...
- npm和git代理
npm 删除代理设置:npm config delete proxynpm config delete https-proxynpm 设置代理:npm config set proxy http:// ...
- vue开发者工具DejaVue
刚刚在逛github的时候发现了一个vue开发工具觉得很不错,分享给v友们! 地址:https://github.com/MiCottOn/DejaVue 话不多说,直接说操作流程!(前提是node版 ...
- python 爬虫001-http请求过程
HTTP 请求流程 一次完整的HTTP请求过程从TCP三次握手建立连接成功后开始,客户端按照指定的格式开始向服务端发送HTTP请求,服务端接收请求后,解析HTTP请求,处理完业务逻辑,最后返回一个HT ...
- 伪变量foo foober是什么意思
原文: The terms foobar, foo, bar, baz and qux are sometimes used as placeholder names (also referred t ...