【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表示黑色骑士,*表示空位.两组数据之间没有空行. 输出格式 ...
随机推荐
- 【Linux相识相知】文本处理工具之grep\egrep\fgrep及正则表达式
常说Linux上有文本处理的三剑客,grep.sed和awk,本文就grep做出详细的描述,并引出正则表达式. grep NAME:打印模式匹配的行 SYNOPISIS: grep [OPTIONS] ...
- 深入理解JavaScript系列(29):设计模式之装饰者模式
介绍 装饰者提供比继承更有弹性的替代方案. 装饰者用用于包装同接口的对象,不仅允许你向方法添加行为,而且还可以将方法设置成原始对象调用(例如装饰者的构造函数). 装饰者用于通过重载方法的形式添加新功能 ...
- Spring.NET入门
Spring.NET入门 http://www.cnblogs.com/haogj/archive/2011/06/10/2077540.html http://www.cnblogs.com/ha ...
- MVC Request.UrlReferrer为null
使用情景,登录后返回登录前访问的页面. 这个时候用到了UrlReferrer var returnUrl = HttpContext.Current.Request.UrlReferrer != nu ...
- C# 面向对象多态的抽象性&接口 object&is as类型转换运算符
抽象类/抽象方法 abstract 抽象的数据类型 抽象类不能被实例化 抽象类中不一定存在抽象方法 抽象方法一定是在抽象类中 抽象类里可以放任意的方法 接口 interface 不是类,就是用来当爹 ...
- [转]scp命令学习
原博客地址http://www.cnblogs.com/peida/archive/2013/03/15/2960802.html scp是secure copy的简写,用于在Linux下进行远程拷贝 ...
- Menu 的key dispatch
DecorView
- Portals
Portals Portals 提供了一种很好的将子节点渲染到父组件以外的 DOM 节点的方式. const appRoot = document.getElementById('app-root') ...
- ActiveMQ VirtualTopic
参考网址: http://activemq.apache.org/virtual-destinations.html http://blog.csdn.net/kimmking/article/det ...
- javascript接入阿里云服务器
authInfo = r.data.authInfo[0]//后台请求的 var client = new OSS({ region: 'oss-cn-beijing',// 云账号AccessKey ...