1085: [SCOI2005]骑士精神
A*搜索。
A*搜索的基础百度百科(实在偷懒没看论文之类的),在这里不说了。
A*搜索很关键的是h(n)估价函数的选取(表示现在到结束节点需要的距离)
设d(n)为实际到结束节点的距离。h(n)<=d(n)就又不会丢掉最优解,又可以中途就排除很多不行的答案。
bfs就是一个h(n)=0的A*搜索。。。。。(所有状态都会被加进去,错的离谱的也要)。。。。。
好感人。。。。
。。。说到哪了。。。。
如果俩个状态有n个不一样的地方,至少要走n-1步,这个估价函数相当好。
在这个程序具体实现中dep=d时,其实已经走了(d+1)步。。所以估价函数不用-1.
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std; const int dx[]={2,1,-1,-2,-2,-1,1,2},dy[]={1,2,2,1,-1,-2,-2,-1}; char EndStatus[5][10] = {
"11111",
"01111",
"00*11",
"00001",
"00000", }; struct Status {
char a[5][6];
int x,y; bool operator ==(Status b) {
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
if(a[i][j] != b.a[i][j]) return false;
return true;
} int differ(Status b) {
int res=0;
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
if(a[i][j] != b.a[i][j]) res++;
return res;
} Status step(int d) {
Status res=*this;
res.x=x+dx[d],res.y=y+dy[d];
if(res.x<0 || res.x>4 || res.y<0 || res.y>4) return *this;
swap(res.a[x][y],res.a[res.x][res.y]);
return res;
} void get() {
for(int i=0;i<5;i++) {
scanf("%s",a[i]);
for(int j=0;j<5;j++) if(a[i][j]=='*') {
x=i; y=j;
}
}
} void get(char b[5][10]) {
for(int i=0;i<5;i++)
for(int j=0;j<5;j++) {
a[i][j]=b[i][j];
if(a[i][j]=='*') {x=i; y=j;}
}
}
}Start,End,t;
int lim,T; bool dfs(int dep,Status s) {
if(dep==lim) return s==End;
for(int d=0;d<8;d++) {
t=s.step(d);
if(!(t==s) && dep+t.differ(End)<=lim) if(dfs(dep+1,t)) return true;
}
return false;
} int main() {
End.get(EndStatus);
scanf("%d",&T);
while(T--) {
Start.get();
for(lim=0;lim<=15;lim++) if(dfs(0,Start)) break;
printf("%d\n",lim>15 ? -1 : lim); }
return 0;
}
1085: [SCOI2005]骑士精神的更多相关文章
- BZOJ 1085: [SCOI2005]骑士精神( IDDFS + A* )
一开始写了个 BFS 然后就 T 了... 这道题是迭代加深搜索 + A* -------------------------------------------------------------- ...
- BZOJ 1085 [SCOI2005]骑士精神 【A*启发式搜索】
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2838 Solved: 1663 [Submit][St ...
- Bzoj 1085: [SCOI2005]骑士精神 (dfs)
Bzoj 1085: [SCOI2005]骑士精神 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 dfs + 剪枝. 剪枝方法: ...
- BZOJ(7) 1085: [SCOI2005]骑士精神
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3233 Solved: 1911[Submit][Stat ...
- 【BZOJ】1085: [SCOI2005]骑士精神(A*启发式搜索)
http://www.lydsy.com/JudgeOnline/problem.php?id=1085 囧啊囧,看了题解后写了个程序,但是样例总过不了T+T,调试了不下于1个小时,肉眼对拍看了根本看 ...
- bzoj 1085: [SCOI2005]骑士精神
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士,且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵 ...
- 1085. [SCOI2005]骑士精神【IDA※】
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2 ...
- [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]
题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...
- [BZOJ 1085][SCOI2005]骑士精神(IDA*)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1085 分析: 首先第一感觉是宽搜,但是空间需要8^15*5*5,明显不够,又鉴于最大深 ...
- 【BZOJ】1085: [SCOI2005]骑士精神
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1085 $${if (cs+val-1>ans) return ;}$$ #inclu ...
随机推荐
- 视频FMS服务器带宽成本分析
一.现状 调查了一下,主要有两种主流方式,WebRTC或者Flash. 1. WebRTC(不支持IE浏览器,已排除):网页实时通信(英语:Web Real-Time Communication)的缩 ...
- Codeforces Round #Pi (Div. 2) E. President and Roads 最短路+桥
题目链接: http://codeforces.com/contest/567/problem/E 题意: 给你一个带重边的图,求三类边: 在最短路构成的DAG图中,哪些边是必须经过的: 其他的(包括 ...
- ubuntu中磁盘挂载与卸载
问题描述: ubuntu中磁盘的挂载和卸载 问题解决: (1)ubuntu中磁盘挂载 注: 如上所示,使用命令df查看磁盘使用情况 ...
- C#中两个日期类型相减得到天数
protected int GetDuration(DateTime start, DateTime finish) { return (finish - start).Days; } 直接相减得到的 ...
- 2013 Asia Chengdu Regional Contest
hdu 4786 Fibonacci Tree http://acm.hdu.edu.cn/showproblem.php?pid=4786 copyright@ts 算法源于ts,用最小生成树可以求 ...
- [SQL Server 系] T-SQL数据库的创建与修改
创建数据库 USE master; GO CREATE DATABASE ToyUniverse ON ( NAME = ToyUniverse_Data, FILENAME = 'F:\Projec ...
- linux 踢出用户方法
linux系统root用户可强制踢制其它登录用户, 首先以root登录以便查看全部的在线用户信息,可用w命令查看登录用户信息 强制踢人命令格式:pkill -kill -t tty 解释: pkill ...
- cojs EX_香蕉 题解报告
这道题目是香蕉的加强版 当m=100w时矩阵会很大,而且又有多组询问,所以这道题用原来香蕉的程序会T 所以我们需要更好点的做法 我们考虑优化我们的状态 首先考虑这道题的隐藏性质,考虑不合法的情况 那么 ...
- lintcode :最大子数组
题目: 最大子数组 给定一个整数数组,找到一个具有最大和的子数组,返回其最大和. 样例 给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6 ...
- QC、IQC、IPQC、FQC、OQC、QA分别的定义
QC:即英文(Quality Control)的简称,中文意义是品质控制,其在ISO8402:1994的定义是“为达到品质要求所采取的作业技术的活动”.有些推行ISO9000的组织会设置这样一个部门或 ...