没有什么特别好的办法,只好用搜索去做

因为一次移动最多归位一个骑士

所以可以想到用IDA*,为了简化状态

我们用k,x,y,sum来表示移动了k步,空格在x,y,还用sum个没有归位的情况

然后枚举转移即可

标准的IDA*

# include<cstring>
# include<iostream>
# include<cstdio>
# include<cmath>
# include<cstdio>
# include<algorithm>
using namespace std;
const int mn = ;
int b[mn][mn]={{},
{,,,,,},
{,,,,,},
{,,,-,,},
{,,,,,},
{,,,,,}};
int dx[]={-,-,-,,-,,,};
int dy[]={-,,, ,-,-,-,};
int a[mn][mn];
int t,sx,sy;
int ans=-;
int maxd;
bool check(int k,int x,int y,int sum,int la)
{
if(k+sum>maxd)
return false;
if(sum==)
return true;
bool flag=false;
int xx,yy,p,col;
for(int i=;i<=;i++)
{
if(i!=-la)
{
xx=x+dx[i];
yy=y+dy[i];
p=sum;
if(xx> && xx<= && yy> && yy<=)
{
if(a[xx][yy]==b[xx][yy] && a[xx][yy]!=b[x][y])
p++;
if(a[xx][yy]!=b[xx][yy] && a[xx][yy]==b[x][y])
p--;
if(b[xx][yy]==-)
p--;
if(b[x][y]==-)
p++;
col=a[xx][yy];
a[xx][yy]=-,a[x][y]=col;
flag=check(k+,xx,yy,p,i);
if(flag)
return true;
a[x][y]=-,a[xx][yy]=col;
}
}
}
return false;
}
void ida(int ret)
{
for(maxd=ret;maxd<=;maxd++)//注意此处要到16
{
if(check(,sx,sy,ret,-))
{
ans=maxd-;
return ;
}
}
}
int main()
{
int ret;
char ch;
scanf("%d",&t);
while(t--)
{
ans=-;
ret=;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
{
cin>>ch;
if(ch=='*')
{
a[i][j]=-;
sx=i,sy=j;
}
else a[i][j]=ch-'';
if(a[i][j]!=b[i][j])
ret++;
}
ida(ret);
printf("%d\n",ans);
}
return ;
}

BZOJ1085 luogu2324骑士精神题解的更多相关文章

  1. BZOJ1085 SCOI2005 骑士精神【IDA* 启发式迭代加深】

    BZOJ1085 SCOI2005 骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...

  2. BZOJ1085:[SCOI2005]骑士精神——题解+IDA*粗略讲解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1085 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空 ...

  3. BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1800  Solved: 984[Submit][Statu ...

  4. 【日常学习】【IDA*】codevs2449 骑士精神题解

    题目描写叙述 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在不论什么时候一个骑士都能依照骑士的走法(它能够走到和它横坐标相差为1.纵坐标相差为2或 ...

  5. [BZOJ1085] [SCOI2005] 骑士精神 (A*)

    Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2, ...

  6. [BZOJ1085][SCOI2005]骑士精神 搜索

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1085 大的思路是迭代加深搜索,我们加一个明显的剪枝,当棋盘中位置不对的骑士的数目加上已经走 ...

  7. BZOJ1085: [SCOI2005]骑士精神

    传送门 dfs+A*优化. A*是人工智能算法,属于启发式搜索的一部分.第一次知道这个名词是在写虫食算的时候闵神说这个用A*搞跑的比谁都快..但是当时搜了很多资料想搞清楚这个东西,但是当时还是太拿衣服 ...

  8. BZOJ1085 [SCOI2005]骑士精神(IDA*)

    IDA*是IDS的基础上加上满足A*算法的估值函数来剪枝的搜索算法. 这题代码量挺少的,可以看出整个IDA*的框架: #include<cstdio> #include<cstrin ...

  9. bzoj1085 [SCOI2005]骑士精神——IDA*

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 搜索,IDA*,估价就是最少需要跳的步数: 代码意外地挺好写的,memcmp 用起来好 ...

随机推荐

  1. oracle pl/sql远程连接过程

    之前没用过oracle,现在公司用到就记录下安装过程吧.安装PL/SQL工具,安装oracle11G工具.打开PL/SQL 进行配置.

  2. UVA11916 Emoogle Grid

    Emoogle Grid You have to color an M × N (1 ≤ M, N ≤ 108 ) two dimensional grid. You will be provided ...

  3. Leetcode165. Compare Version Numbers比较版本号

    比较两个版本号 version1 和 version2. 如果 version1 > version2 返回 1,如果 version1 < version2 返回 -1, 除此之外返回  ...

  4. bzoj 3110 [Zjoi2013]K大数查询——线段树套线段树(标记永久化)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3110 第一道线段树套线段树! 第一道标记永久化! 为什么为什么写了两个半小时啊…… 本想线段 ...

  5. jeecms系统使用介绍——jeecms中的内容、栏目、模型之间的关系

    转载:https://blog.csdn.net/dongdong9223/article/details/76578120 jeecms是一款很不错的cms产品,之前在文章<基于Java的门户 ...

  6. javax.el.PropertyNotFoundException: Property 'studentAge' not found on type com.hs.model.StudentModel

    mi明明已经把这个字段重构了,为啥还这样提示呢?整个工程全部 查找也找不到这个字段了啊

  7. golang标准库中有些函数只有签名没有函数体是怎么回事?

  8. Django静态文件以及模板文件的配置 jQuery v1.12.4

    1.配置模板的路径 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os. ...

  9. js获取时间差值

    function GetTime(firstDate, secondDate) { // 1.对事件进行处理 var firsttime = Date.parse(firstDate + " ...

  10. java 将word转为PDF (100%与word软件转换一样)

    jdk环境:jdk_8.0.1310.11_64    (64位) 1.引入pom文件 <!-- word转pdf(依赖windows本地的wps) --> <dependency& ...