【BZOJ】【1085】【SCOI2005】骑士精神
IDA*算法
Orz HZWER
A*+迭代加深搜索=IDA*
这题的估价相当于一个可行性剪枝,即如果当前走的步数s+未归位的点数>搜索深度k,则剪枝
/**************************************************************
Problem: 1085
User: Tunix
Language: C++
Result: Accepted
Time:1388 ms
Memory:1272 kb
****************************************************************/ //BZOJ 1085
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rep(i,n) for(int i=0;i<n;++i)
#define F(i,j,n) for(int i=j;i<=n;++i)
#define D(i,j,n) for(int i=j;i>=n;--i)
using namespace std; int getint(){
int v=,sign=; char ch=getchar();
while(ch<''||ch>'') {if (ch=='-') sign=-; ch=getchar();}
while(ch>=''&&ch<='') {v=v*+ch-''; ch=getchar();}
return v*=sign;
}
/*******************tamplate********************/
int k;
const int ans[][]={{,,,,},
{,,,,},
{,,,,},
{,,,,},
{,,,,}};
const int fx[]={,,-,-,,,-,-},
fy[]={,-,,-,,-,,-}; bool flag=;
bool judge(int a[][]){
rep(i,)
rep(j,)
if (ans[i][j]!=a[i][j]) return ;
return ;
}
bool eva(int a[][],int s){
int v=;
rep(i,)
rep(j,)
if (a[i][j]!=ans[i][j]){
v++;
if(v+s>k) return ;
}
return ;
}
//v¼´Îª¹À¼Ûº¯Êý£¨Èç¹û¸úans²î¾àÌ«´ó£¬²»¿ÉÄÜÔÚk²½Ö®ÄÚ³ö½â£¬ÔòÉáÆú
void search(int s,int a[][],int x,int y){
if (s==k) {if (judge(a)) flag=; return;}
if (flag==) return;
rep(i,){
int tx=x+fx[i],ty=y+fy[i];
if (tx<||tx>||ty<||ty>) continue;
swap(a[x][y],a[tx][ty]);
if (eva(a,s)) search(s+,a,tx,ty);
swap(a[x][y],a[tx][ty]);
}
}
int main(){
int T=getint();
char ch[];
while(T--){
int a[][],x,y;
memset(a,,sizeof a);
rep(i,){
scanf("%s",ch);
rep(j,)
if (ch[j]=='*'){ a[i][j]=;x=i;y=j; }
else a[i][j]=ch[j]-'';
}
flag=;
for(k=;k<=;++k){
search(,a,x,y); if (flag){ printf("%d\n",k);break;}
}
if (!flag) printf("-1\n");
}
return ;
}
【BZOJ】【1085】【SCOI2005】骑士精神的更多相关文章
- Bzoj 1085: [SCOI2005]骑士精神 (dfs)
Bzoj 1085: [SCOI2005]骑士精神 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 dfs + 剪枝. 剪枝方法: ...
- 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] 骑士精神 [ IDA* 搜索 ]
题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...
- bzoj 1085: [SCOI2005]骑士精神
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士,且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2,纵 ...
- [BZOJ 1085][SCOI2005]骑士精神(IDA*)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1085 分析: 首先第一感觉是宽搜,但是空间需要8^15*5*5,明显不够,又鉴于最大深 ...
- BZOJ.1085.[SCOI2005]骑士精神(迭代加深搜索)
题目链接 最小步数这类,适合用迭代加深搜索. 用空格走代替骑士. 搜索时记录上一步防止来回走. 不需要每次判断是否都在位置,可以计算出不在对应位置的骑士有多少个.而且每次复原一个骑士至少需要一步. 空 ...
- bzoj 1085 [SCOI2005]骑士精神——IDA*
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 迭代加深搜索. 估价函数是为了预计步数来剪枝,所以要优于实际步数. 没错,不是为了确定 ...
- bzoj 1085: [SCOI2005]骑士精神 IDA*
题目链接 给一个图, 目标位置是确定的, 问你能否在15步之内达到目标位置. 因为只有15步, 所以直接ida* #include<bits/stdc++.h> using namespa ...
- BZOJ 1085: [SCOI2005]骑士精神(A*算法)
第一次写A*算法(这就是A*?如果这就是A*的话,那不就只是搜索的一个优化了= =,不过h函数如果弄难一点真的有些难设计) 其实就是判断t+h(x)(t为当前步数,h(x)为达到当前状态的最小步数) ...
随机推荐
- 跟着上一个tcpServer 一起来的
具体功能就是通过反射为实体类赋值 public class httpParse<T> where T : new() { /// <summary> ...
- 20150222—LINQ to SQL 插入、更新和删除
注意,使用LINQ to SQL时, 表中必须有一个主键才可以起效,否则系统将无法对数据作出修改 插入新数据,根据上一片的文章实例在其中添加新的控件: 编号TextBox(Name):sno 名字Te ...
- 10款精美的web前端源码的特效
1.HTML5侧滑聊天面板 很酷的聊天界面 这是一款基于HTML5和SVG的侧滑聊天面板,初始化的时候聊天面板是锁定的,当你拖动白色区域时,即可解锁展开聊天面板,显示所有好友.点击面板中的好友即可切换 ...
- 7款震撼人心的HTML5CSS3文字特效
1.HTML5像素文字爆炸重组动画特效 今天我们要分享一款基于HTML5技术的文字像素爆炸重组动画特效,我们可以在输入框中指定任意文字,点击确定按钮后,就会将原先的文字爆炸散去,新的文字以像素点的形式 ...
- 《HTML5与CSS3基础教程》学习笔记 ——One Day
第一章 1. 邮箱地址的URL地址包括:mailto:+邮箱地址 2. ../表示向上走一级,开头直接使用/表示根目录 第三章 1. <header>: role = “ ...
- linux系统man查询命令等级与意义
代号 意义 1 可执行程序和一般shell命令 2 系统调用函数 3 库函数 4 设备配置文件,通常在/dev下 5 配置文件,/ec下 6 游戏 7 协议及杂项 8 管理员命令 9 与内核相关
- CSS3属性box-shadow使用教程
CSS3的box-shadow属性可以让我们轻松实现图层阴影效果.我们来实战详解一下这个属性. 1. box-shadow属性的浏览器兼容性先来看一个这个属性的浏览器兼容性: Opera: 不知道是从 ...
- HTML5读取本地文件 FileReader API接口
1.FileReader接口的方法 FileReader接口有4个方法,其中3个用来读取文件,另一个用来中断读取.无论读取成功或失败,方法并不会返回读取结果,这一结果存储在result属性中. Fil ...
- UINavigationController 与 UITabBarController
http://www.cnblogs.com/YouXianMing/p/3756904.html // index start from 1. UITabBarItem *newsItem = [[ ...
- js学习笔记一数字
js所有数值都用浮点数来表示 十六进制数字以0x或者0X为前缀,由0-9,a-f(大小写均可)之间字符构成,a-f对应的数值是10-15 八进制数字以数字0开始,其后跟随0-7之间的数字,严格来说,j ...