[bzoj] 1085 骑士精神 || ID-DFS
原题
找到最少的步数成为目标状态。
IDDFS(限制层数的dfs)即可
#include<cstdio>
#include<algorithm>
using namespace std;
int t,n,m,disx[10]={0,1,2,2,1,-1,-2,-2,-1},disy[10]={0,2,1,-1 ,-2,-2,-1,1,2},posx,posy,ans;
char a[8][8];
int read()
{
int ans=0,fu=1;
char j=getchar();
for (;(j<'0' || j>'9') && j!='-';j=getchar()) ;
if (j=='-') j=getchar(),fu=-1;
for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0';
return ans*fu;
}
int chk()
{
int cnt;
if (a[3][3]!='*') cnt=1;
for (int i=1;i<=5;i++)
for (int j=i+(i>=3);j<=5;j++)
if (a[i][j]=='0') cnt++;
for (int i=5;i>=1;i--)
for (int j=1;j<=i-(i<=3);j++)
if (a[i][j]=='1') cnt++;
return cnt;
}
bool check()
{
for (int i=1;i<=5;i++)
for (int j=i+(i>=3);j<=5;j++)
if (a[i][j]=='0') return 0;
for (int i=5;i>=1;i--)
for (int j=1;j<=i-(i<=3);j++)
if (a[i][j]=='1') return 0;
return 1;
}
bool illegal(int x,int y)
{
if (x<1 || y<1) return 1;
if (x>5 || y>5) return 1;
return 0;
}
void dfs(int x,int px,int py)
{
if (!x)
{
if (px==3 && py==3 && check()) ans=1;
return ;
}
for (int i=1;i<=8;i++)
{
int vx,vy;
vx=px+disx[i];
vy=py+disy[i];
if (illegal(vx,vy)) continue;
swap(a[vx][vy],a[px][py]);
if (chk()<=x) dfs(x-1,vx,vy);
swap(a[vx][vy],a[px][py]);
}
}
int main()
{
t=read();
while (t--)
{
ans=0;
for (int i=1;i<=5;i++)
{
for (int j=1;j<=5;j++)
{
a[i][j]=getchar();
if (a[i][j]=='*') posx=i,posy=j;
}
getchar();
}
for (int i=0;i<=15;i++)
{
dfs(i,posx,posy);
if (ans)
{
printf("%d\n",i);
break;
}
}
if (!ans) printf("-1\n");
}
return 0;
}
[bzoj] 1085 骑士精神 || ID-DFS的更多相关文章
- bzoj 1085骑士精神
bzoj 1085骑士精神 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士,且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2 ...
- BZOJ 1085 骑士精神 迭代加深搜索+A*
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1085 题目大意: 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个 ...
- A*算法详解 BZOJ 1085骑士精神
转载1:A*算法入门 http://www.cppblog.com/mythit/archive/2009/04/19/80492.aspx 在看下面这篇文章之前,先介绍几个理论知识,有助于理解A*算 ...
- bzoj 1085骑士精神 迭代深搜
题目传送门 题目大意:给出一幅棋盘,问能否复原,中文题面,不做解释. 思路:第一次写迭代深搜的题目,这道题还是挺经典的.这道题的状态很明显的每多搜一层就是多八倍,非常的多,而且又是t组输入,所以必定有 ...
- [BZOJ]1085 骑士精神(SCOI2005)
这种鲜明的玄学风格很明显就是十几年前的题目. Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...
- BZOJ SCOI2005骑士精神
裸IDA*,ans从1到15循环来限制搜索深度. #include<cstdio> #include<cstring> #include<algorithm> us ...
- Bzoj 1085: [SCOI2005]骑士精神 (dfs)
Bzoj 1085: [SCOI2005]骑士精神 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 dfs + 剪枝. 剪枝方法: ...
- 【BZOJ】1085: [SCOI2005]骑士精神(A*启发式搜索)
http://www.lydsy.com/JudgeOnline/problem.php?id=1085 囧啊囧,看了题解后写了个程序,但是样例总过不了T+T,调试了不下于1个小时,肉眼对拍看了根本看 ...
- [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]
题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...
随机推荐
- mariadb多实例实现
环境:centos7,yum 安装mariadb5.5 mkdir /mysqldb/{3306,3307.3308}/{etc,socket,pid,log,data} -pv chown -R m ...
- mysql 命令 小结
CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;创建中文数据库show gl ...
- Go Doc文档
Go为我们提供了快速生成文档和查看文档的工具,很容易编写查看代码文档.在项目协作过程中,可以帮助我们快速理解代码. 查看文档方式有两种:一种是通过终端查看,使用go doc命令,一种是通过网页查看,使 ...
- Centos6.8安装python3.6
1.目的简介: centos默认使用的是python 2.6.6,而python的2.x 和 3.x 是两个不兼容的版本,到目前的python发展,都已经过渡到了python 3.x,所以需要手动将p ...
- Linux中的代码编辑器vim
Vim的三种工作模式 命令行模式 插入模式 底行模式 Vim 的命令行模式 命令行模式是进入vim后的初始模式,在该模式下主要是使用方向键来移动光标的位置,并通过相应的命令来进行文字的编辑. 切换方法 ...
- ThinkPHP路由去掉隐藏URL中的index.php
官方默认的.htaccess文件 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On ...
- C语言字符篇(一)字符串转换函数
#include <stdlib.h> double atof(const char *nptr); 将字符串转换成双精度浮点数 int atoi(const char *npt ...
- linux最大进程数
使用 ulimit -a 命令,查看 max user processes 的输出,就是系统最大进程数 core file size (blocks, -c) unlimited data seg s ...
- linux-shell——02
Linux命令的通用命令格式 :命令字 [选项] [参数] 选项: 作用:用于调节命令的具体功能 "-"引导短格式选项(单个字符) EX:“-l” "--"引导 ...
- Java线程和多线程(八)——Thread Dump
Java的Thread Dump就是列出JVM中所有激活状态的线程. Java Thread Dump Java Thread Dump在分析应用性能瓶颈和死锁的时候,是非常有效的. 下面将介绍多种不 ...