题目大意:略

直接爆搜会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 ;
}

最新文章

  1. .net 导出Excel功能
  2. FlashBuilder 新建项目时提示 java.lang.nullpointerexception
  3. ENVI数据显示操作【Tools菜单操作1】
  4. 内嵌DB
  5. 关于Java异常和错误的几个问题
  6. Javascript call与apply记录
  7. Android判断界面
  8. 远程连接MySQL 不允许
  9. Oracle行转列实例
  10. ThinkPHP 初探
  11. Vue(二十五)打包后路径报错问题
  12. 新版的 Springsecurity request.getRequestDispatcher).forward(request, response); 404 问题,已解决
  13. 【转载】关闭XenServer中挂起(hang)虚机的方法
  14. LigerUI子父窗口之间传参问题
  15. struts2实现jQuery的异步交互
  16. linux 下安装nginx
  17. Spring WebSocket踩坑指南
  18. swift 添加webview
  19. jquery获取浏览器宽高
  20. PHP获取访客IP、地区位置信息、浏览器、来源页面

热门文章

  1. 路飞学城Python-Day35
  2. html格式的文档转成word下载
  3. Node_进阶_2
  4. 为什么Arduino独占鳌头并站稳脚跟?
  5. ivew Modal rule校验冲突问题
  6. &quot;啃下&quot;插入排序
  7. freeswitch mod_xml_curl
  8. tomcat 映射虚拟路径
  9. 【hdu 6319】Ascending Rating
  10. SVG 贝塞尔曲线控制【方便设置】:贝塞尔曲线