BZOJ_1085_[SCOI2005]骑士精神_IDDFS
BZOJ_1085_[SCOI2005]骑士精神_DFS
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
10110
01*11
10111
01001
00000
01011
110*1
01110
01010
00100
Sample Output
7
-1
因为题中说只需要考虑15步以内的,所以迭代加深搜索即可。
剪枝的话每次求一下还差几步没还原,然后和还剩几步可以走的比较。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define RR register
int tx[]={-2,-1,1,2,2,1,-1,-2};
int ty[]={-1,-2,-2,-1,1,2,2,1};
int g[6][6],a[6][6];
char s[10];
bool is() {
RR int i,j;
for(i=1;i<=5;i++) for(j=1;j<=5;j++) if(a[i][j]!=g[i][j]) return 0;
return 1;
}
int calc() {
RR int i,j,re=0;
for(i=1;i<=5;i++) {
for(j=1;j<=5;j++) re+=(a[i][j]!=g[i][j]);
}
return re;
}
bool dfs(int dep,int maxdep,int x,int y) {
if(dep==maxdep) {
if(is()) return 1;
return 0;
}
if(maxdep-dep<calc()-1) return 0;
RR int i;
for(i=0;i<8;i++) {
int dx=tx[i]+x,dy=ty[i]+y;
if(dx>=1&&dx<=5&&dy>=1&&dy<=5) {
swap(a[dx][dy],a[x][y]);
int tmp=calc();
if(tmp+dep<=maxdep) if(dfs(dep+1,maxdep,dx,dy)) return 1;
swap(a[dx][dy],a[x][y]);
}
}
return 0;
}
void solve() {
int i,j;
int sx=0,sy=0;
for(i=1;i<=5;i++) {
scanf("%s",s+1);
for(j=1;j<=5;j++) {
if(s[j]=='1') a[i][j]=1;
if(s[j]=='0') a[i][j]=0;
if(s[j]=='*') a[i][j]=2,sx=i,sy=j;
}
}
if(a==g) {
puts("0"); return ;
}
for(i=1;i<=15;i++) {
//printf("%d\n",i);
if(dfs(0,i,sx,sy)) {
printf("%d\n",i); return ;
}
}
puts("-1");
}
int main() {
int T;
int i;
scanf("%d",&T);
for(i=1;i<=5;i++) g[1][i]=1;
for(i=2;i<=5;i++) g[2][i]=1;
g[3][3]=2; g[3][4]=g[3][5]=g[4][5]=1;
while(T--) {
solve();
}
}
BZOJ_1085_[SCOI2005]骑士精神_IDDFS的更多相关文章
- BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1800 Solved: 984[Submit][Statu ...
- 【bzoj1085】[SCOI2005]骑士精神
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1757 Solved: 961[Submit][Statu ...
- BZOJ 1085: [SCOI2005]骑士精神( IDDFS + A* )
一开始写了个 BFS 然后就 T 了... 这道题是迭代加深搜索 + A* -------------------------------------------------------------- ...
- [luogu P2324] [SCOI2005]骑士精神
[luogu P2324] [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1 ...
- 【洛谷】2324:[SCOI2005]骑士精神【IDA*】
P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...
- BZOJ1085 SCOI2005 骑士精神【IDA* 启发式迭代加深】
BZOJ1085 SCOI2005 骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...
- BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2838 Solved: 1663 [Submit][St ...
- 洛谷 P2324 [SCOI2005]骑士精神 解题报告
P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...
- 【洛谷2324】[SCOI2005]骑士精神 IDA*
[SCOI2005]骑士精神 描述 在一个\(5×5\)的棋盘上有\(12\)个白色的骑士和\(12\)个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为 ...
随机推荐
- golang实现文字云算法
golang实现文字云算法 项目链接 https://github.com/bangbaoshi/wordcloud 效果图 测试步骤如下 git clone https://github.com/b ...
- 修改访问的后缀contant
设置Struts 2处理的请求后缀及Action调用 1.在struts2中默认处理的请求后缀为action,我们可以修改struts.xml 和struts.properties来修改默认的配置,在 ...
- MVC3 项目总结
验证 Validation 多样化验证规则 http://www.cnblogs.com/xling/archive/2012/07/11/2587002.html 最常见的验证方式是:在实体的属性上 ...
- TensorFlow学习记录(一)
windows下的安装: 首先访问https://storage.googleapis.com/tensorflow/ 找到对应操作系统下,对应python版本,对应python位数的whl,下载. ...
- Http持久连接与HttpClient连接池
一.背景 HTTP协议是无状态的协议,即每一次请求都是互相独立的.因此它的最初实现是,每一个http请求都会打开一个tcp socket连接,当交互完毕后会关闭这个连接. HTTP协议是全双工的协议, ...
- rsync的详细配置
服务器配置: yum install rsync 安装rsync vi /etc/rsyncd.conf 创建主配置文件 pid file = /var/run/rsyncd.pid port ...
- AdminIII连接linux Postgresql过程中的几个小问题
1.postgresql.conf主配置文件中要配置postgresql绑定的IP,如果不设置,可能只绑定本地闭环地址:127.0.0.1,可以设定为0.0.0.0:就包括了一切IPv4地址 2.pg ...
- jsoup 使用总结3--高级用法之 not
jsoup 使用总结3--高级用法之 not 大部分时候,我们使用jsoup解析网页的时候,都是直接找到某一类元素,或者按某种selector查询:具体使用方法可以参考jsoup官网文档 例子代码: ...
- oracle数据库的备份与还原(本地及远程操作)
数据的导出 exp qh/qh@qh file='d:\backup\qh\qh20060526.dmp' grants=y full=n 1 将数据库TEST完全导出,用户名system 密 ...
- 多层嵌套的json数据
很多时候我们见到的json数据都是多层嵌套的,就像下面这般: {"name":"桔子桑", "sex":"男", , & ...