洛谷 P2324 [SCOI2005]骑士精神
题目描述
输入输出格式
输入格式:
第一行有一个正整数T(T<=10),表示一共有N组数据。接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位。两组数据之间没有空行。
输出格式:
对于每组数据都输出一行。如果能在15步以内(包括15步)到达目标状态,则输出步数,否则输出-1。
输入输出样例
2
10110
01*11
10111
01001
00000
01011
110*1
01110
01010
00100
7
-1
说明
迭代加深搜索+最优性剪枝
#include <iostream>
#include <cstdio>
using namespace std;
int goal[][]={{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,}};
int T,ans,qp[][],q[][],fx[]={,,-,-,,,-,-},fy[]={,-,,-,,-,,-};
bool flag;
int judge()
{
int ret=;
for(int i=;i<=;++i)
for(int j=;j<=;++j)
if(qp[i][j]!=goal[i][j]) ret++;
return ret;
}
void dfs(int now,int x,int y,int Limit)
{
if(now>Limit||flag) return;
int cy=judge();
if(now==Limit) if(cy==) {ans=Limit;flag=;return;}
if(now+cy->Limit) return;//最优性剪枝 目前+差异>限制
for(int i=;i<;++i)
{
int tx=x+fx[i],ty=y+fy[i];
if(tx>=&&tx<=&&ty>=&&ty<=)
{
swap(qp[x][y],qp[tx][ty]);
dfs(now+,tx,ty,Limit);
swap(qp[x][y],qp[tx][ty]);
}
}
}
int main()
{
scanf("%d",&T);
for(int x,y;T--;)
{
ans=;flag=false;
for(int i=;i<=;++i)
{
char p;
for(int j=;j<=;++j)
{
cin>>p;
if(p=='*') q[i][j]=,x=i,y=j;
else q[i][j]=p-'';
}
}
for(int i=;i<=;++i)
{
for(int j=;j<=;++j)
for(int k=;k<=;++k)
qp[j][k]=q[j][k];
dfs(,x,y,i);
if(ans==i) break;
}
if(ans<=) printf("%d\n",ans);
else printf("-1\n");
}
return ;
}
洛谷 P2324 [SCOI2005]骑士精神的更多相关文章
- 洛谷 P2324 [SCOI2005]骑士精神 解题报告
P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...
- 洛谷P2324 [SCOI2005] 骑士精神
题目 方法很多,最经典的是用搜索的算法,也就是\(IDA*\)算法搜索. \(IDA*\)算法是每次规定一个搜索深度,并在搜索的时候限制该搜索深度,从而达到把深搜的优点和广搜的优点结合起来优化时间的一 ...
- [luogu P2324] [SCOI2005]骑士精神
[luogu P2324] [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1 ...
- P2324 [SCOI2005]骑士精神(A*)
P2324 [SCOI2005]骑士精神 A*与爆搜的不同就是它有一个估价函数$h(x)$ 这个估价函数一般设为从当前状态到终点状态的估计最短步数,这样可以有效剪枝 但估计值必须严格小于等于实际剩余步 ...
- 【题解】P2324 [SCOI2005]骑士精神
·有关IDA* 是带有估值函数的迭代加深搜索,表现出出色的效率. 估值函数可以简单的定义为「已经到位的骑士的个数」. 然后就是普通的迭代加深了. 算法酷炫不一定赢,搜索好才是成功. ——Loli Co ...
- 【luogu P2324 [SCOI2005]骑士精神】 题解
题目链接:https://www.luogu.org/problemnew/show/P2324 不懂怎么剪枝,所以说,,我需要氧气.. 第一道A* // luogu-judger-enable-o2 ...
- Luogo P2324 [SCOI2005]骑士精神
所有想练习A*的人都先来敲一下这道题吧. 数据范围即便只有5*5,但朴素的爆搜还是会超时. 因此考虑剪枝. 对于这道题,肯定只要进行最优化剪枝,判断现在走的步数+剩下最少要走的步数,如果大于ans或者 ...
- P2324 [SCOI2005]骑士精神
题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位.两组数据之间没有空行. 输出格式 ...
- Luogu P2324 [SCOI2005]骑士精神 搜索
刚开始写了个没迭代的...结果过了$qwq$ 然后迭个代..更快了.. #include<cstdio> #include<iostream> #define R regist ...
随机推荐
- SSM之全局异常处理器
1. 异常处理思路 首先来看一下在springmvc中,异常处理的思路: 如上图所示,系统的dao.service.controller出现异常都通过throws Exception向上抛出,最后 ...
- Pseudo Random Nubmer Sampling
Pseudo Random Nubmer Sampling https://en.wikipedia.org/wiki/Inverse\_transform\_sampling given a dis ...
- a possible low-level optimization
http://www.1point3acres.com/bbs/thread-212960-1-1.html 位的vector<int> counts,遍历nums,然后counts[nu ...
- Auto Layout Guide----(二)-----Auto Layout Without Constraints
Auto Layout Without Constraints 没有约束的自动布局 Stack views provide an easy way to leverage the power of A ...
- Jmeter JDBC Request 中文乱码问题
在JDBC Request的SQL Query的编辑器输入中文会乱码,导入插入数据库的内容也是乱码,如下图 解决办法:JDBC Connection Configuration的Database UR ...
- 2. nmap扫描神器总结
-----------------nmap(选项)(参数)------------------O:激活操作探测: -P0:值进行扫描,不ping主机: -PT:是同TCP的ping: -sV:探测服务 ...
- pandas基础(3)_数据处理
1:删除重复数据 使用duplicate()函数检测重复的行,返回元素为bool类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为true >>> df =D ...
- codevs1553 互斥的数
1553 互斥的数
- 洛谷P4770 [NOI2018]你的名字(后缀自动机+线段树)
传送门 我有种自己根本没学过SAM的感觉……最后还是抄了老半天的题解…… 首先,对$S$和每一次的$T$都建一个SAM 先考虑一下$l=1,r=\left| S \right|$的情况 设$lim_i ...
- Node.js 内置模块crypto加密模块(3) HMAC
HMAC:哈希消息认证码 ( Hash-based Message Authentication Code ) HMAC是密钥相关的哈希算法 使用 HMAC 进行加密的Node实现的一种方法: &qu ...