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个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...
随机推荐
- js浏览器问题
前段时间做了个项目,里面关于手机移动端下载的问题 开始是判断微信.ios和android系统的下载 因为微信屏蔽点击事件和链接的缘故,需要通过打开新页面来进行下载 ios和android的下载分别为不 ...
- baidu练习/html/css
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- easyui easyui-accordion的使用和在tab切换时没有样式
1.easyui-accordion的使用 <div id="aa" class="easyui-accordion" style="width ...
- JS - 浅拷贝与深拷贝的理解以及简单实现方法
前几天撸项目代码时, 由一个技术点间接牵扯出了这东西. 所以就来总结一下. 深拷贝 拷贝对象每个层级的属性. 作用的对象是 js中引用类型的对象,基本类型没有涉及. 本质上将引用类型的对象在堆上重新开 ...
- HDU 1575 Tr A( 简单矩阵快速幂 )
链接:传送门 思路:简单矩阵快速幂,算完 A^k 后再求一遍主对角线上的和取个模 /********************************************************** ...
- Flask入门系列(转载)
一.入门系列: Flask入门系列(一)–Hello World 项目开发中,经常要写一些小系统来辅助,比如监控系统,配置系统等等.用传统的Java写,太笨重了,连PHP都嫌麻烦.一直在寻找一个轻量级 ...
- python_函数、局部变量与全局变量
#函数优点:代码重用.保持一致性.可扩展性import time def logger(): """时间年-月-日 分""" time_fo ...
- reac实现控制输入框字符长度
reac实现控制输入框字符长度 代码思路:
- 模块打包机--webpack--基础使用
什么是webpack? 作用有哪些? WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,Type ...
- Maven系列--web.xml 配置详解
一 .web.xml介绍 启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 紧接着,容 ...