题目描述

输入格式

第一行有一个正整数T(T<=10),表示一共有N组数据。接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位。两组数据之间没有空行。

输出格式

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


emmmmmm, 一道机房各位强者都A掉的题, IDA* = 迭代加深DFS + 估价函数。 用当前的状态与目标状态不同的点数作为估价函数, 以步数为迭代的深度, 在合法的情况下进行dfs, 最终输出答案
#include <bits/stdc++.h>using namespace std;typedef long long ll;
const int INF = 0x3f3f3f3f;
const int MAXN = 5e5 + 100;
const int MAXM = 3e3 + 10;template < typename T > inline void read(T &x) {x = 0; T ff = 1, ch = getchar();while(!isdigit(ch)) {if(ch == '-') ff = -1;ch = getchar();} while(isdigit(ch)) {x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();} x *=ff;
} template < typename T > inline void write(T x) {if(x < 0) putchar('-'), x = -x;if(x > 9) write(x / 10); putchar(x % 10 + '0');
} int T, u, v, flag = false;
int a[10][10];
int dx[10] = {2, 1, 2, 1, -2, -1, -2, -1};
int dy[10] = {1, 2, -1, -2, 1, 2, -1 ,-2};
int b[10][10] = {{3, 3, 3 ,3, 3, 3}, {3, 1, 1, 1, 1, 1}, {3, 0, 1, 1, 1, 1},{3, 0, 0, 2, 1, 1}, {3, 0, 0, 0, 0, 1},{3, 0, 0, 0, 0, 0},
};
char ch;int get_H() {int cnt = 0;for(int i = 1; i <= 5; ++i) {for(int j = 1; j <= 5; ++j)if(a[i][j] != b[i][j]) ++cnt;}return cnt;
}void IDAstar(int now, int high, int x, int y) {if(now == high) {if(!get_H()) {flag = true;return ;} }for(int i = 0; i < 8; ++i) {int xx = x + dx[i], yy = y + dy[i];if(xx < 1 || xx > 5 || yy < 1 || yy > 5) continue;swap(a[xx][yy], a[x][y]);if(now + get_H() - 1 < high) IDAstar(now + 1, high, xx, yy);swap(a[x][y], a[xx][yy]);}
}int main() {read(T);while(T--) {for(int i = 1; i <= 5; ++i) {for(int j = 1; j <= 5; ++j) {cin >> ch;if(ch == '*') {a[i][j] = 2;u = i;v = j;}else a[i][j] = (ch - '0');} }if(!get_H()) {puts("0");continue;}flag = false;for(int i = 1; i <= 15; ++i) {IDAstar(0, i, u, v);if(flag) {write(i);puts("");break;}}if(!flag) puts("-1");}return 0;
} 

转载于:https://www.cnblogs.com/AK-ls/p/11474428.html

骑士精神(IDA*)相关推荐

  1. 『骑士精神 IDA*』

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

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

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

  3. [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]

    题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...

  4. P2324 [SCOI2005]骑士精神(IDA*)

    思路:不是动骑士,而是动空格.只能动15次,证明搜索树的高的确定的,考虑IDA解决 IDA能很好地解决一些搜索中有上界的情况 大概就是搞一个估值函数,然后当前情况+估价函数>限制的情况直接剪掉这 ...

  5. luoguP2324 [SCOI2005]骑士精神 IDA*

    题面 这个题比较简单 直接枚举搜索深度 估价函数为当前棋盘与目标棋盘不同的棋的个数 然后直接迭代加深搜索就可以了 当然还不能走回头路 Codes #include<bits/stdc++.h&g ...

  6. bzoj 1085: [SCOI2005]骑士精神(IDA*)

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

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

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

  8. [SCOI2005][BZOJ1085] 骑士精神

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1112  Solved: 604 [Submit][Sta ...

  9. 【SCOI 2005】骑士精神

    [题目] 传送门 题目描述: 在一个 5×55×55×5 的棋盘上有 121212 个白色的骑士和 121212 个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...

  10. 骑士精神(双向深搜+meet in the middle)

    题目描述 在一个5×55×55×5的棋盘上有121212个白色的骑士和121212个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为111,纵坐标相差为22 ...

最新文章

  1. Spring根据包名获取包路径下的所有类
  2. python基础入门(10)之循环语句
  3. 聊聊flink的KvStateRegistryGateway
  4. delphi读音_用Delphi 6编程实现自动标注汉语拼音_Delphi
  5. Linux - Vim常用命令清单
  6. 群晖虚拟机VMM定时开启
  7. 工作网络计算机显示不完全,win10网络共享,计算机显示不全?
  8. 关于_WIN32_WINNT
  9. html405是什么错误,网站打开显示405错误信息如何解决?
  10. 十二载征程犹未止,看今朝星光尽闪耀丨万字长文回顾2023数据技术嘉年华
  11. 二战企*查*查-企业-数-据爬虫
  12. Linux命令学习资料总结
  13. 渗透之——使用Metasploit实现对缓冲区栈的溢出攻击
  14. Matlab使用文件框选择文件
  15. 小学计算机小蘑菇教案,《会走路的小蘑菇》教案
  16. OriginPro常用配置
  17. 木头机器人变魔方_【转】一个木头魔方的制作过程
  18. DASH标准ABR算法介绍
  19. React - Content
  20. steam插件_教程丨如何查询Steam游戏的历史价格信息

热门文章

  1. 一天刷到5篇「x is All You Need」,当学术论文开始标题党……
  2. 基于UI组件的Vue可视化布局、快速生成.vue代码
  3. Arthas-idea
  4. Linux命令 - zip命令
  5. SpringBoot+Redis 实现一个微博热搜!
  6. C++:使用高斯-勒让德正交估计柯西主值 (CPV) 某些奇异积分(附完整源码)
  7. Python(x,y)安装
  8. 微服务之间的最佳调用方式
  9. ASRock B650M Riptide AMD Ryzen 7 7800X3D电脑 Hackintosh 黑苹果efi引导文件
  10. app推广:转化率低才是最大的浪费