BZOJ 1085 / LOJ 2151 [SCOI2005]骑士精神 (剪枝/A*迭代搜索)
题目大意:略
直接爆搜会T,我们优化一下,统计出当前棋盘和目标棋盘不同的位置的数量k,那么当前棋盘变成目标棋盘最少的移动次数是k-1
每次选择一个最大深度ma,那么如果当前走了dep步,显然必须保证dep+k-1<=ma,否则当前棋盘就是永远无法在规定步数ma内到达目标棋盘的
其实这个不算很A*吧...应该算剪枝
移动方向的数量打错了WA了好久...另外LOJ上有这道题的数据
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define NN 65538
#define MM 100
#define ll long long
#define uint unsigned int
#define ull unsigned long long
#define inf 0x3f3f3f3f
#define idx(X,Y) ((X)*5+(Y))
using namespace std; int T;
const int Ed=;
const int maxn=;
int mp[][],bin[],cnt[NN];
int xx[]={-,-,,,,,-,-};
int yy[]={,,,,-,-,-,-};
int check(int x,int y)
{if(x<||y<||x>||y>)return ;return ;}
int dfs(int dep,int s,int p,int ma,int fa,int fp)
{
if(s==Ed&&p==) return ;
if(dep>=ma) return ;
int x=p/,y=p%;
int tx,ty,t,tp,sum,h,ans;
sum=Ed^s;
h=cnt[sum&maxn]+cnt[sum>>];
if((p!=)&&(!(sum&(<<p)))&&(!(Ed&(<<p)))) h++;
if((p!=)&&(!(sum&(<<)))&&(!(s&(<<)))) h++;
if(dep+h->ma) return ;
for(int k=;k<;k++)
{
tx=x+xx[k],ty=y+yy[k];
if(!check(tx,ty)) continue;
if(s&(bin[idx(tx,ty)]))
t=(s^bin[idx(tx,ty)])|bin[idx(x,y)];
else t=s;
tp=idx(tx,ty);
if(t==fa&&tp==fp) continue;
ans=dfs(dep+,t,tp,ma,s,p);
if(ans) return ;
}return ;
} int main()
{
//freopen("t2.in","r",stdin);
scanf("%d",&T);
bin[]=;
for(int i=;i<=;i++)
bin[i]=bin[i-]<<;
for(int i=;i<;i++)
for(int j=;j<;j++)
if(i&(<<j)) cnt[i]++;
while(T--)
{
char str[];int s=,p;
for(int i=;i<;i++)
{
scanf("%s",str);
for(int j=;j<;j++){
if(str[j]=='*'){
p=idx(i,j);
}else if(str[j]==''){
s|=(bin[idx(i,j)]);
}
}
}
int fl=;
for(int k=;k<=;k++){
int ans=dfs(,s,p,k,-,);
if(ans){
printf("%d\n",k);
fl=;break;}
}
if(!fl) printf("-1\n");
}
return ;
}
BZOJ 1085 / LOJ 2151 [SCOI2005]骑士精神 (剪枝/A*迭代搜索)的更多相关文章
- 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]骑士精神( 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 ...
- BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1800 Solved: 984[Submit][Statu ...
- 【bzoj1085】[SCOI2005]骑士精神
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1757 Solved: 961[Submit][Statu ...
- BZOJ_1085_[SCOI2005]骑士精神_IDDFS
BZOJ_1085_[SCOI2005]骑士精神_DFS Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可 ...
- 【洛谷】2324:[SCOI2005]骑士精神【IDA*】
P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...
- BZOJ1085 SCOI2005 骑士精神【IDA* 启发式迭代加深】
BZOJ1085 SCOI2005 骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...
随机推荐
- MySQL Reading table information for completion of table and column names
打开数据库是发现提示: mysql> show databases; +--------------------+ | Database | +--------------------+ | b ...
- tomcat闪退无法启动 the catalina_home environment variable is not defined correctly this environment variable is needed to run this program
未成功配置CATALINA_HOME 1.计算机>属性>环境变量, 新建环境变量.变量名为CATALINA_HOME ,变量值tomcat的解压目录,注意后面不用多加“\”或者“;” 2. ...
- ES6特性:(阮一峰老师)学习总结
ES6(阮一峰)学习总结 1.块级作用域的引入 在ES6之前,js只有全局作用域和函数作用域,ES6中let关键字为其引入了块级作用域. { var a = 5; let b = 6; } con ...
- React 中的 refs的应用
React Refs React 支持一种非常特殊的属性 Ref ,你可以用来绑定到 render() 输出的任何组件上. 这个特殊的属性允许你引用 render() 返回的相应的支撑实例( back ...
- jquery weui ajax滚动加载更多
手机端使用jquery weui制作ajax滚动加载更多. 演示地址:http://wx.cnkfk.com/nuol/static/fpage.html 代码: <!DOCTYPE html& ...
- Libvirt中windows虚拟机的动态内存管理
非常短的前提 Libvirt支持对虚拟机进行内存动态扩展,可是windows虚拟机首先须要安装virtio-win驱动. KVM提供的virtio-win驱动下载地址: http://www.linu ...
- 低效能的”where1=1”
网上有不少人提出过类似的问题:"看到有人写了where 1=1这种sql,究竟是什么意思?".事实上使用这种使用方法的开发者一般都是在使用动态数组的sql. 让我们想象例如以下的场 ...
- hdu 4882 ZCC Loves Codefires(贪心)
# include<stdio.h> # include <algorithm> # include <string.h> using namespace std; ...
- crm操作报价单实体
using System; using Microsoft.Xrm.Sdk; using Microsoft.Crm.Sdk.Messages; using Microsoft ...
- Darwin流媒体server在windows下搭建
简单介绍 主页: http://dss.macosforge.org/ Darwin Streaming Server (DSS) is an open sourceproject intende ...