【传送门:BZOJ1085】


简要题意:

  有一个5*5的棋盘,棋盘上有12个白棋子,12个黑棋子,和一个空格,每只棋子只能按照马走日的规则移动,求出最少步数达到以下状态


题解:

  DFS+A*

  DFS很容易做,不过时间复杂度太高

  所以用A*来优化时间

  A*的好处预判当前递归到结束得到的值,从而判断是否进入递归,部分判断,避免遍历太多无用点


参考代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int a[6][6];
const int dx[9]={0,1,1,-1,-1,2,2,-2,-2};
const int dy[9]={0,2,-2,2,-2,1,-1,1,-1};
bool bk;
int ans[6][6]=
{{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}
};
bool pd()
{for(int i=1;i<=5;i++) for(int j=1;j<=5;j++) if(a[i][j]!=ans[i][j]) return false;return true;
}
int w;
bool pdA(int k)
{int s=0;for(int i=1;i<=5;i++){for(int j=1;j<=5;j++){if(a[i][j]!=ans[i][j]){s++;if(s+k>w) return false;}}}return true;
}
void dfs(int x,int y,int k)
{if(bk==true) return ;if(k==w){if(pd()==true) bk=true;return ;}else{for(int i=1;i<=8;i++){int tx=x+dx[i],ty=y+dy[i];if(tx<1||tx>5||ty<1||ty>5) continue;swap(a[x][y],a[tx][ty]);if(pdA(k)==true) dfs(tx,ty,k+1);swap(a[x][y],a[tx][ty]);}}
}
int main()
{int T;scanf("%d",&T);while(T--){char st[10];int kx,ky;for(int i=1;i<=5;i++){scanf("%s",st+1);for(int j=1;j<=5;j++){if(st[j]=='*'){a[i][j]=2;kx=i,ky=j;}else a[i][j]=st[j]-'0';}}bk=false;for(w=1;w<=15;w++){dfs(kx,ky,0);if(bk==true){printf("%d\n",w);break;}}if(bk==false) printf("-1\n");}return 0;
}

转载于:https://www.cnblogs.com/Never-mind/p/8608399.html

BZOJ1085: [SCOI2005]骑士精神相关推荐

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

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

  2. BZOJ1085 [SCOI2005] 骑士精神

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 1085: [SCOI2005]骑士精神

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

最新文章

  1. 独家 | 一文读懂LinkedIn个性化推荐模型及建模原理
  2. for循环语句的用法
  3. Linux系统下GNU Wget 命令用法详解及其参数说明
  4. windows 下oracle 数据库 rman 备份
  5. Redis开发运维实践数据操作之HyperLogLog操作
  6. pinia中文文档 指导文档中文翻译版 pinia指导中文翻译
  7. php二分查找法实例
  8. win10 +cude9.2+相匹配的cudnn+相匹配的tensorflow+ssd学习之路(问题百出2)
  9. Oracle 错误疑难解决方案和总结
  10. 车辆身份特征识别引擎
  11. How to Become a Straight-A student
  12. YYlabelCopy
  13. 笔记本电脑黑屏 笔记本开机黑屏 笔记本黑屏怎么办
  14. 链游成公链新宠,风口之下究竟哪家称王? 1
  15. centos6/7 vault源使用
  16. 长沙鸿蒙置业楼盘,来了!来了!湖南金融中心北中心,全新盘规划公示!刚需户型为主!...
  17. 百度网盘压缩下载文件的CRC校验错误的解决方法
  18. 如何在SpringBootOAuth服务器中实现双因素身份验证?第一部分:配置
  19. BIOS升级与CMOS设置
  20. ‘xxx‘ is not public in ‘xxx‘,Cannot be accessed from outside package

热门文章

  1. 利用union判断系统的大小端
  2. (转)Http协议经典详解
  3. 关于Qomo OpenProject的进度(2006.01.04)
  4. Mac中安装Node和版本控制工具nvm遇到的坑
  5. 2springboot:快速创建springboot项目
  6. python 中cPickle学习二
  7. MySQL5.7多源复制的实验
  8. 勒索病毒攻击应急防范
  9. [逆向][Writeup]ISG2015 flagfinder - .NET程序逆向
  10. iOS应用内付费(IAP)开发步骤列表