bzoj1085
肯定是搜索题无疑问,
首先要求在15步以内(包括15步)到达目标状态,也就是限定了搜索的深度,于是我们用dfs更合适
但这样复杂度仍然太大,原因就是我们在搜索中做了很多很不优的尝试
考虑当前状态若与目标状态有x处不相同,我们至少要移动x-1步才能成功
如果当前移动次数+x-1>=已找到的最小移动次数(没找到就为16),那么再往下移动肯定是没有意义的
这样我们就可以构造出估价函数,大大优化时间复杂度
const dx:array[..] of integer=(-,,-,,-,-,,);
dy:array[..] of integer=(,,-,-,-,,-,);
en:array[..,..] of integer=((,,,,),
(,,,,),
(,,-,,),
(,,,,),
(,,,,));
var num,a:array[..,..] of integer;
k,min,x0,y0,x1,y1,i,j,t:longint;
s:string; procedure swap(var a,b:integer);
var c:integer;
begin
c:=a;
a:=b;
b:=c;
end; function check:longint;
var i,j:integer;
begin
check:=;
for i:= to do
for j:= to do
if a[i,j]<>en[i,j] then inc(check);
exit(check-);
end; procedure dfs(x,y,d:integer);
var xx,yy,i,p:integer;
begin
if d>=min then exit;
p:=check;
if p=- then
begin
min:=d;
exit;
end;
if p+d>=min then exit;
for i:= to do
begin
xx:=x+dx[i];
yy:=y+dy[i];
if (xx>) and (xx<=) and (yy>) and (yy<=) then
begin
swap(a[x,y],a[xx,yy]);
dfs(xx,yy,d+);
swap(a[x,y],a[xx,yy]);
end;
end;
end; begin
readln(t);
while t> do
begin
min:=;
k:=;
for i:= to do
begin
readln(s);
for j:= to do
begin
if s[j]='*' then
begin
x0:=i;
y0:=j;
a[i,j]:=-;
end
else a[i,j]:=ord(s[j])-;
end;
end;
dfs(x0,y0,);
if min= then writeln(-) else writeln(min);
dec(t);
end;
end.
bzoj1085的更多相关文章
- 【bzoj1085】 SCOI2005—骑士精神
http://www.lydsy.com/JudgeOnline/problem.php?id=1085 (题目链接) 题意 给出一个初始局面,问能否在15步内走到最终局面,并输出最少步数. Solu ...
- BZOJ1085 SCOI2005 骑士精神【IDA* 启发式迭代加深】
BZOJ1085 SCOI2005 骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...
- 【BZOJ1085】[SCOI2005]骑士精神 双向BFS
[BZOJ1085][SCOI2005]骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它 ...
- BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1800 Solved: 984[Submit][Statu ...
- BZOJ1085: [SCOI2005]骑士精神
传送门 dfs+A*优化. A*是人工智能算法,属于启发式搜索的一部分.第一次知道这个名词是在写虫食算的时候闵神说这个用A*搞跑的比谁都快..但是当时搜了很多资料想搞清楚这个东西,但是当时还是太拿衣服 ...
- BZOJ1085 [SCOI2005]骑士精神(IDA*)
IDA*是IDS的基础上加上满足A*算法的估值函数来剪枝的搜索算法. 这题代码量挺少的,可以看出整个IDA*的框架: #include<cstdio> #include<cstrin ...
- 【bzoj1085】[SCOI2005]骑士精神
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1757 Solved: 961[Submit][Statu ...
- [BZOJ1085] [SCOI2005] 骑士精神 (A*)
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2, ...
- bzoj1085 骑士精神
Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2, ...
随机推荐
- nvidia安装与卸载方式
第1种方法:.最好的方式不是手动安装官方驱动(手动安装官方驱动无法使用gpu,而且无法启用3d,同时无法生效,所以最好采用此种方法),而是使用bumblebee-nvidia安装,不过要先添加x-sw ...
- Object-C在Nil上调用方法
在Object-C中,nil对象的作用等同于很多其它语言的NULL指针.不同的地方在于,在nil上调用方法不会导致程序崩溃或抛出异常. 这种技术被用在很多地方,但是对于我们来讲,最主要的就是我们不用在 ...
- [Java][20160707]Java语言介绍
Java最早的名称叫"oak"后来改名叫"Java". Java最早是属于"Sun"公司的, 后来被"Oracle"公司 ...
- 使用宏定义来减少JNI的繁琐
本篇文章由:http://www.sollyu.com/use-macro-definitions-to-reduce-tedious-jni/ 说明 相信写过cocos2d-x的朋友,或者写过jni ...
- ScrollView 尽量避免嵌套RelativeLayout,非常惨痛的教训
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...
- 每天一条linux命令——halt
halt命令用来关闭正在运行的Linux操作系统.halt命令会先检测系统的runlevel,若runlevel为0或6,则关闭系统,否则即调用shutdown来关闭系统. 语法: halt(选项) ...
- RM-Linux驱动--Watch Dog Timer(看门狗)驱动分析
from:http://blog.csdn.net/geekcome/article/details/6595265 硬件平台:FL2440 内核版本:2.6.28 主机平台:Ubuntu 11,04 ...
- ubuntu 在XP下硬盘安装
以下选择在XP下用 grub4dos 安装 ubuntu 12.04版本 需要下载两个文件:一个是grub4dos,另一个是 ubutuntu 镜像文件 grub4dos下载地址:http://dow ...
- php Static静态关键字
静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用.静态属性不允许对象使用->操作符调用. class Car { private static $speed = ...
- mysql可视化管理工具
1.navicat for mysql 2.navicat premium 3.HeidiSQL 4.MySQLWorkbench