1085: [SCOI2005]骑士精神

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 2838  Solved: 1663
[Submit][Status][Discuss]

Description

  在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位。在任何时候一个骑士都能按照骑
士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵坐标相差为1的格子)移动到空
位上。 给定一个初始的棋盘,怎样才能经过移动变成如下目标棋盘: 为了体现出骑士精神,他们必须以最少的步
数完成任务。

Input

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

Output

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

Sample Input

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

Sample Output

7
-1

直接搜肯定超时,状态有很多种

考虑到每次移动最多多增一个匹配位置,我们其实在搜索的时候可以估计最少还剩多少步搜到,如果不满足条件就退出

这就是A*算法啦

为了加快速度,我们可以枚举所需步数,分15次搜,搜到则停

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long int
#define REP(i,n) for (int i = 1; i <= (n); i++)
#define Redge(u) for (int k = head[u]; k != -1; k = edge[k].next)
using namespace std;
const int maxn = 100005,maxm = 100005,INF = 1000000000;
int ans[5][5] =
{{1,1,1,1,1},
{0,1,1,1,1},
{0,0,2,1,1},
{0,0,0,0,1},
{0,0,0,0,0}};
int a[5][5],X[8] = {-1,-2,-2,-1,1,2,2,1},Y[8] = {-2,-1,1,2,2,1,-1,-2};
int k;
bool flag;
bool judge(){for (int i = 0; i < 5; i++)for (int j = 0; j < 5; j++)if (a[i][j] != ans[i][j]) return false;return true;
}
bool check(int s){int cnt = 0;for (int i = 0; i < 5; i++)for (int j = 0; j < 5; j++)if (a[i][j] != ans[i][j]) {cnt++;if (cnt + s > k) return false;}return true;
}
void dfs(int s,int x,int y){if (s == k) {if (judge()) flag = true; return;}int nx,ny;for (int i = 0; i < 8; i++){nx = x + X[i]; ny = y + Y[i];if (nx < 0 || ny < 0 || nx > 4 || ny > 4) continue;swap(a[x][y],a[nx][ny]);if (check(s)) dfs(s + 1,nx,ny);swap(a[x][y],a[nx][ny]);}
}
int main(){int Tim;cin>>Tim;while (Tim--){memset(a,0,sizeof(a)); flag = false;char c; int x,y;for (int i = 0; i < 5; i++)for (int j = 0; j < 5; j++){c = getchar();while (c != '1' && c != '0' && c != '*') c = getchar();if (c == '*') a[i][j] = 2,x = i,y = j;else a[i][j] = c - '0';}for (k = 1; k <= 15; k++){dfs(0,x,y);if (flag){printf("%d\n",k);break;}}if (!flag) printf("-1\n");}return 0;
}

转载于:https://www.cnblogs.com/Mychael/p/8282783.html

BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】相关推荐

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

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

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

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

  3. 1085: [SCOI2005]骑士精神

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

  4. bzoj1085: [SCOI2005]骑士精神(a*)

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

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

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

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

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

  7. [A*,启发式搜索] [SCOI2005] 骑士精神

    链接:https://ac.nowcoder.com/acm/problem/20247 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  8. BZOJ1085 [SCOI2005] 骑士精神

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

  9. 【题解】P2324[SCOI2005] 骑士精神

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

最新文章

  1. mybatis的一些基础问题
  2. java接口测试入门
  3. Polya原理的应用经典实例
  4. 【BZOJ3676】 [Apio2014]回文串(SAM,manacher)
  5. python安装与配置
  6. python 时分秒毫秒_第一篇:Python处理时间日期
  7. JavaScript随机排序算法1
  8. mui实现分享功能_继MIUI之后,华为EMUI更新,深度实现万物互联
  9. [转帖]备忘:CentOS-7 使用systemctl 管理的服务,文件打开数上限1024要改
  10. wepack中loader的分类
  11. 机器学习基础(二十七)—— 数据集的使用
  12. 【百度地图API】情人节求爱大作战——添加标注功能
  13. c语言编译器w7,wintc下载|c语言编译器wintc win7/win8兼容版 v2.0下载 64位32位 - 3322软件站...
  14. 中国顶级CEO经典语录
  15. btrfs + snapper快照使用
  16. 信息资源管理3500字超详细,全网最全笔记!!(第一章 1)
  17. Varnish反向代理服务器和 HTTP 加速器
  18. 因数和以及因数个数和问题
  19. Python攻防-APK批量自动反编译与数据分析
  20. VC++基于微软语音引擎开发语音识别总结

热门文章

  1. ubuntu开启SSH服务和允许root远程SSH登录
  2. 荣幸参加 微软 Teched 2012 会议
  3. SQL validation failed.Column ‘content‘ not found in any table
  4. CPU time与WALL time
  5. 知乎上关于固态硬盘的一些知识
  6. colab文件夹上传到github
  7. is not allowed to connect to this MySql
  8. 深度学习(四十四)——GAN的评估指标, DCGAN, WGAN-GP, CGAN, BEGAN EBGAN
  9. python re模块 字符串匹配_re模块实现正则表达式之match()方法
  10. JEPaas代码((列表,表单)确认入库按钮