【luogu P2324 [SCOI2005]骑士精神】 题解
题目链接:https://www.luogu.org/problemnew/show/P2324
不懂怎么剪枝,所以说,,我需要氧气。。
第一道A*
// luogu-judger-enable-o2
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define maxn 10
using namespace std;
int T, ans = , mx, sx, sy;
int aim[][] = {{,,,,,},
{,,,,,},
{,,,,,},
{,,,,,},
{,,,,,},
{,,,,,}};
int dx[] = {-,-,,,,,-,-};
int dy[] = {,,,,-,-,-,-};
int a[maxn][maxn];
inline int h()
{
int ret = ;
for(int i = ; i <= ; i++)
for(int j = ; j <= ; j++)
if(a[i][j] != aim[i][j]) ret++;
return ret;
}
inline bool move(int x, int y)
{
if(x >= && x <= && y >= && y <= ) return true;
return false;
}
void A_star(int now, int x, int y)
{
if(now > mx) return;
int cnt = h();
if(cnt == )
{
ans = min(ans, now);
return;
}
if(cnt + now - > mx) return;
int nowx, nowy;
for(int i = ; i <= ; i++)
{
nowx = x + dx[i];
nowy = y + dy[i];
if(move(nowx, nowy))
{
swap(a[nowx][nowy],a[x][y]);
A_star(now+,nowx,nowy);
swap(a[nowx][nowy],a[x][y]);
}
}
}
int main()
{
cin.sync_with_stdio(false);
cin>>T;
while(T--)
{
char s;
ans = ;
memset(a,,sizeof(a));
for(int i = ; i <= ; i++)
for(int j = ; j <= ; j++)
{
cin>>s;
if(s != '*')
a[i][j] = s + - '';
if(s == '*')
{
a[i][j] = ;
sx = i;
sy = j;
}
}
for(mx = ; mx <= ; mx++)
{
A_star(,sx,sy);
if(ans == mx) break; }
if(ans == )
{
cout<<-<<endl;
}
else
{
cout<<ans<<endl;
}
}
return ;
}
【luogu P2324 [SCOI2005]骑士精神】 题解的更多相关文章
- [luogu P2324] [SCOI2005]骑士精神
[luogu P2324] [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1 ...
- Luogu P2324 [SCOI2005]骑士精神 搜索
刚开始写了个没迭代的...结果过了$qwq$ 然后迭个代..更快了.. #include<cstdio> #include<iostream> #define R regist ...
- 洛谷 P2324 [SCOI2005]骑士精神 解题报告
P2324 [SCOI2005]骑士精神 题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,* ...
- P2324 [SCOI2005]骑士精神(A*)
P2324 [SCOI2005]骑士精神 A*与爆搜的不同就是它有一个估价函数$h(x)$ 这个估价函数一般设为从当前状态到终点状态的估计最短步数,这样可以有效剪枝 但估计值必须严格小于等于实际剩余步 ...
- BZOJ1085:[SCOI2005]骑士精神——题解+IDA*粗略讲解
http://www.lydsy.com/JudgeOnline/problem.php?id=1085 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空 ...
- 【题解】P2324 [SCOI2005]骑士精神
·有关IDA* 是带有估值函数的迭代加深搜索,表现出出色的效率. 估值函数可以简单的定义为「已经到位的骑士的个数」. 然后就是普通的迭代加深了. 算法酷炫不一定赢,搜索好才是成功. ——Loli Co ...
- Luogo P2324 [SCOI2005]骑士精神
所有想练习A*的人都先来敲一下这道题吧. 数据范围即便只有5*5,但朴素的爆搜还是会超时. 因此考虑剪枝. 对于这道题,肯定只要进行最优化剪枝,判断现在走的步数+剩下最少要走的步数,如果大于ans或者 ...
- P2324 [SCOI2005]骑士精神
题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位.两组数据之间没有空行. 输出格式 ...
- 洛谷 P2324 [SCOI2005]骑士精神
题目描述 输入输出格式 输入格式: 第一行有一个正整数T(T<=10),表示一共有N组数据.接下来有T个5×5的矩阵,0表示白色骑士,1表示黑色骑士,*表示空位.两组数据之间没有空行. 输出格式 ...
随机推荐
- TOJ 2641 Gene
描述 How can millions of different and complex structures be built using only a few simple building bl ...
- 腾讯毛华:智能交互,AI助力下的新生态
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 演讲人:毛华 腾讯云语音云总经理 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会在广 ...
- mysql无法连接Can't create a new thread (errno 11)
问题描述: 今天本地navicat连接服务器mysql出错 ,提示ERROR 1135: Can't create a new thread (errno 11); if you are not ou ...
- python爬取英语学习资料并发送邮件
新建发送邮件类 import smtplib from email.mime.text import MIMEText from email.header import Header class Se ...
- JAVA常见中文问题的解决方法(转)
JAVA常见中文问题的解决方法 http://www.java-cn.com/club/article-5876-1.html 以下解决方案是笔者在日常生活中遇到的,希望能对你解决JAVA中文问题有所 ...
- PAT 1025 PAT Ranking
#include <cstdio> #include <cstdlib> #include <vector> #include <cstring> #i ...
- 绘图和数据可视化工具包——matplotlib
一.Matplotlib介绍 Matplotlib是一个强大的Python**绘图**和**数据可视化**的工具包. # 安装方法 pip install matplotlib # 引用方法 impo ...
- Django的模型层
一.ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...
- scss-!default默认变量
在变量赋值之前, 利用!default为变量指定默认值. 也就是说,如果在此之前变量已经赋值,那就不使用默认值,如果没有赋值,则使用默认值. 代码实例如下: $content: "antzo ...
- Linux漏洞分析入门笔记-Off-By-One(栈)
ubuntu-16.04.5(X86) IDA7.0 0x00.漏洞描述 1.什么是off by one?又称1字节溢出. 源字符串长度等于目标缓冲区长度时,将源字符串复制到目标缓冲区可能会导致off ...