【题目】

传送门

题目描述:

在一个 5×55×55×5 的棋盘上有 121212 个白色的骑士和 121212 个黑色的骑士, 且有一个空位。在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为 111 ,纵坐标相差为 222 或者横坐标相差为 222 ,纵坐标相差为 111 的格子)移动到空位上。

给定一个初始的棋盘,怎样才能经过移动变成如下目标棋盘:

为了体现出骑士精神,他们必须以最少的步数完成任务。

输入格式:

第一行有一个正整数 ttt(ttt ≤ 101010),表示一共有 ttt 组数据。

接下来有 ttt 个 5×55×55×5 的矩阵,000 表示白色骑士,111 表示黑色骑士,∗*∗ 表示空位。两组数据之间没有空行。

输出格式:

对于每组数据都输出一行。如果能在 151515 步以内(包括 151515 步)到达目标状态,则输出步数,否则输出 −1-1−1 。

样例数据:

输入
2
10110
01*11
10111
01001
00000
01011
110*1
01110
01010
00100

输出
7
-1

备注:

【样例说明】
样例中第二个数据的初始情况对应该图:

【分析】

题解:IDA*(我觉得就是迭代加深和 A* 的结合)

看到数据范围最多移动 151515 次,很容易想到搜索,但爆搜显然是不行的,要想办法优化,于是想到这几个搜索优化

首先是由于最多走 151515 步,很容易想到迭代加深,不断加大深度来判断当前的深度是否合法

然后就是用 A* 优化,这道题的估价函数是很好写的,由于每次移动最多使一个骑士到位,所以统计一下当前没有到位的骑士就是估计值了

直接用骑士来 dfsdfsdfs 不太好做,我们就想到用空格的移动来 dfsdfsdfs(因为每次移动空格的位置都会变)

【代码】

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int h,flag,a[10][10];
int tx[10]={0,1,1,2,2,-2,-2,-1,-1};
int ty[10]={0,2,-2,1,-1,1,-1,2,-2};
int goal[7][7]={{0,0,0,0,0,0},{0,1,1,1,1,1},{0,0,1,1,1,1},{0,0,0,2,1,1},{0,0,0,0,0,1},{0,0,0,0,0,0}
};
int eva()
{int i,j,num=0;for(i=1;i<=5;++i)for(j=1;j<=5;++j)if(a[i][j]!=goal[i][j])num++;return num;
}
void A_star(int x,int y,int dep)
{if(dep==h){if(!eva())flag=true;return;}int i,xx,yy;for(i=1;i<=8;++i){xx=x+tx[i];yy=y+ty[i];if(xx>=1&&xx<=5&&yy>=1&&yy<=5){swap(a[x][y],a[xx][yy]);if(eva()+dep<=h)A_star(xx,yy,dep+1);swap(a[x][y],a[xx][yy]);}}
}
int main()
{char c;int n,i,j,sx,sy;scanf("%d",&n);while(n--){for(i=1;i<=5;++i){for(j=1;j<=5;++j){cin>>c;a[i][j]=c-'0';if(c=='*')  a[i][j]=2,sx=i,sy=j;}}if(!eva())  {printf("0\n");continue;}flag=0;for(h=1;h<=15;++h){A_star(sx,sy,0);if(flag)  {printf("%d\n",h);goto end;}}printf("-1\n");end:;}return 0;
}

【SCOI 2005】骑士精神相关推荐

  1. [luogu 2324][SCOI 2005] 骑士精神 (A*算法)

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

  2. 【BZOJ1085】【SCOI2005】骑士精神 [A*搜索]

    骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB [Submit][Status][Discuss] Description 在一个5×5的棋盘上有12个白色 ...

  3. [启发式搜索/A*] [SCOI2005]骑士精神题解

    洛谷-骑士精神 启发式搜索-A* 估价函数 对于当前状态,我们可以将其与目标状态对比,得到一个预估的代价,即最少(不一定满足题意)的代价,得到这个代价的函数叫做估价函数 对于一个最短路问题来说,我们可 ...

  4. 『骑士精神 IDA*』

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

  5. BZOJ1085 [SCOI2005] 骑士精神

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

  6. 洛谷 P2324 [SCOI2005]骑士精神 解题报告

    P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...

  7. BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2838  Solved: 1663 [Submit][St ...

  8. 埃及分数The Rotation Game骑士精神——IDA*

    IDA*:非常好用的搜索,可以解决很多深度浅,但是规模大的搜索问题. 估价函数设计思路:观察一步最多能向答案靠近多少. 埃及分数 题目大意: 给出一个分数,由分子a 和分母b 构成,现在要你分解成一系 ...

  9. bzoj1085骑士精神(搜索)

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1893  Solved: 1051 Description ...

最新文章

  1. torch中tensor的普通索引以及index_select()
  2. vue请求在退出页面还执行吗_如何用 Cloudbase Framework 部署一个 Vue 项目
  3. Tensorflow2.x.x全卷积神经网络(CNN)
  4. 你以为文言编程只是闹着玩?三个月后,人家IDE、教程、包管理器都有了
  5. html div画三角,css画三角形
  6. airflow使用_使用AirFlow,SAS Viya和Docker像Pro一样自动化ML模型
  7. 数字前端工程师必备技能
  8. Bootstrap CSS 编码规范之单行规则声明
  9. opencv 轮廓 缺陷检测
  10. 为中国本土NGINX用户和开发者提供技能升级的考试认证平台
  11. docker技术之基本命令
  12. js执行函数报错Cannot set property 'value' of null
  13. 【雷达测角】基于matlab和差波束加权【含Matlab源码 1674期】
  14. (亲测有效).net framework 在计算机上已安装了更高的 4.x 版本,则无法安装以前的 4.5 版本。
  15. UCan技术开放日|告别转型“焦虑”,从云原生开始
  16. 看网易云公开课代码性能开发有感,怎样提高代码的性能
  17. Mybatis之xml方式(一)
  18. 《Context Contrasted Feature and Gated Multi-Scale Aggregation for Scene Segmentation》论文阅读
  19. 2016京东校园招聘在线笔试回忆版
  20. Github即将破百万的PDF:编写高质量代码改善JAVA程序的151个建议

热门文章

  1. matlab abc dq,关于matlab及pscad中abc2dq模块的使用.doc
  2. 不要忘了我们心中的梦
  3. 软件的生命周期和测试的生命周期的区分
  4. springBoot二维码生成案例
  5. 关于windows11安装vc6.0闪退解决问题
  6. Kotlin+Retrofit + MVVM 的网络请求框架的封装
  7. C语言中void的错误用法
  8. Flutter ShowModalBottomSheet 自定义高度和滚动
  9. 复位的recovery time和removal time
  10. SpringBoot(SpringMVC)文件上传下载