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, ...
随机推荐
- Linq 与UnitOfWork
submitchages(linq to sql)或者savechanges(ef)的次数是根据你操作方法的数量决定的,也即是:它只认识自己的提交语句(submtchanges,savechanges ...
- apache2.2 + tomcat6 整合以及集群配置整理
运行环境:apache2.2.X + tomcat6.0.X + window xp 1. 安装Apache,服务启动后在浏览器中输入http://localhost进行测试,如果能看到一个" ...
- iOS NSNumber语法糖
BOOL equal; NSNumber * num1 = [NSNumber numberWithInteger:]; NSNumber * num2 = @; equal = [num1 isEq ...
- 国庆第七日(2014年10月7日17:55:56),随手记,一些关注的OSC软件,花生壳
(1)最难过的是今天. (2)随手记:001.002. (3)htmlunit.joda-time.date4j.jdao.BeanGenerator.JavaScript秘密花园(开源图书) OS ...
- Qt 之 QtScript
前言 前面学习中,很多地方都用到了C++和JavaScript相互通信.今天就学习QtScript模块吧. Qt 包含完全集成的 ECMA 标准脚本引擎.Qt Script 集成了 QObject,为 ...
- Android版多线程下载器核心代码分享
首先给大家分享多线程下载核心类: package com.example.urltest; import java.io.IOException; import java.io.InputStream ...
- javaIo流实际应用
/*查看目录下所有的文件*/ package cn.file; import java.io.File; public class Text2 { public static void main(St ...
- IIS原理学习
IIS 原理学习 首先声明以下内容是我在网上搜索后整理的,在此只是进行记录,以备往后查阅只用. IIS 5.x介绍 IIS 5.x一个显著的特征就是Web Server和真正的ASP.NET Appl ...
- svn 日志 offline 错误
http://zhidao.baidu.com/question/200406861.html (转) #anon-access = read anon-access = none #把read改成n ...
- CGDataCmd
1,"Get Inf Joint from file" 选择文件中储存的骨骼信息; 2,"Export skinWeight" 导出权重; 3," ...