肯定是搜索题无疑问,

首先要求在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的更多相关文章

  1. 【bzoj1085】 SCOI2005—骑士精神

    http://www.lydsy.com/JudgeOnline/problem.php?id=1085 (题目链接) 题意 给出一个初始局面,问能否在15步内走到最终局面,并输出最少步数. Solu ...

  2. BZOJ1085 SCOI2005 骑士精神【IDA* 启发式迭代加深】

    BZOJ1085 SCOI2005 骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐 ...

  3. 【BZOJ1085】[SCOI2005]骑士精神 双向BFS

    [BZOJ1085][SCOI2005]骑士精神 Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它 ...

  4. BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1800  Solved: 984[Submit][Statu ...

  5. BZOJ1085: [SCOI2005]骑士精神

    传送门 dfs+A*优化. A*是人工智能算法,属于启发式搜索的一部分.第一次知道这个名词是在写虫食算的时候闵神说这个用A*搞跑的比谁都快..但是当时搜了很多资料想搞清楚这个东西,但是当时还是太拿衣服 ...

  6. BZOJ1085 [SCOI2005]骑士精神(IDA*)

    IDA*是IDS的基础上加上满足A*算法的估值函数来剪枝的搜索算法. 这题代码量挺少的,可以看出整个IDA*的框架: #include<cstdio> #include<cstrin ...

  7. 【bzoj1085】[SCOI2005]骑士精神

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1757  Solved: 961[Submit][Statu ...

  8. [BZOJ1085] [SCOI2005] 骑士精神 (A*)

    Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2, ...

  9. bzoj1085 骑士精神

    Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑士的走法(它可以走到和它横坐标相差为1,纵坐标相差为2或者横坐标相差为2, ...

随机推荐

  1. C#微信公众号开发 -- (七)自定义菜单事件之VIEW及网页(OAuth2.0)授权

    通俗来讲VIEW其实就是我们在C#中常用的a标签,可以直接在自定义菜单URL的属性里面写上需要跳转的链接,也即为单纯的跳转. 但更多的情况下,我们是想通过VIEW来进入指定的页面并进行操作. 举一个简 ...

  2. Block中的引用循环

    原文地址:http://www.cnblogs.com/lujianwenance/p/5910490.html Block在实际的开发中非常的常用,事件回调.传值.封装成代码块调用等等.很多人都对b ...

  3. sublimeText3中 less2css error: `lessc` is not available的解决办法

    昨天在sublimeText3中安装了less 以及 less2css插件,但是在编译保存的时候总是出现错误: less2css error: `lessc` is not available 就go ...

  4. thinkphp 自定义标签

    关于标签的个人理解是 拼凑php 字符串 通过eval()来进行,返回数据.过程应该是这样的,在模板中加入 定义标签为<mytag:list></mytag>,那么在mvc 中 ...

  5. 《ext江湖》第8章继承-代码片段

    创建Animal对象 <html> <head> <title>11</title> <META HTTP-EQUIV="Content ...

  6. Codevs 1138 聪明的质监员 2011年NOIP全国联赛提高组

    1138 聪明的质监员 2011年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小 T 是一名质量监督员, ...

  7. Codevs 1648 最大和

    1648 最大和 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description N个数围成一圈,要求从中选择若干个连续的数(注意每个 ...

  8. C++多态性的理解

    本文章转载来自:http://www.sollyu.com/?p=627 代码 #include <iostream.h> class Animal { public: void eat( ...

  9. 管理员把我的admin权限去掉了,那么如何获得jdk zip安装呢?这篇可以帮你。

    JDK is not available as a portable zip unfortunately. However, you can: Create working JDK directory ...

  10. Page类成员

    1. Request,Response,Server属性:对contex.Request,context.Response,context.Server的简化调用2. AppRelativeVirtu ...