题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1085

搜索,IDA*,估价就是最少需要跳的步数;

代码意外地挺好写的,memcmp 用起来好方便啊。

代码如下:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. using namespace std;
  5. int goal[][]=
  6. {{,,,,},
  7. {,,,,},
  8. {,,,,},
  9. {,,,,},
  10. {,,,,}};
  11. int dx[]={,-,,-,,-,,-},dy[]={,-,-,,,-,-,},T,a[][],ans,k;
  12. bool fl;
  13. bool pd(int dep)
  14. {
  15. int cnt=;
  16. for(int i=;i<;i++)
  17. for(int j=;j<;j++)
  18. if(a[i][j]!=goal[i][j])cnt++;
  19. return cnt+dep<=k;
  20. }
  21. void dfs(int dep,int x,int y)
  22. {
  23. if(dep==k&&memcmp(goal,a,sizeof a)==)
  24. {
  25. fl=; return;
  26. }
  27. for(int i=;i<;i++)
  28. {
  29. if(fl||dep>=k)return;//
  30. int xx=x+dx[i],yy=y+dy[i];
  31. if(xx<||yy<||xx>||yy>)continue;//!
  32. swap(a[x][y],a[xx][yy]);
  33. if(pd(dep))dfs(dep+,xx,yy);
  34. swap(a[x][y],a[xx][yy]);
  35. }
  36. }
  37. int main()
  38. {
  39. scanf("%d",&T);
  40. while(T--)
  41. {
  42. char ch[]; fl=;
  43. int si,sj;
  44. for(int i=;i<;i++)
  45. {
  46. scanf("%s",&ch);
  47. for(int j=;j<;j++)
  48. if(ch[j]=='*')a[i][j]=,si=i,sj=j;
  49. else a[i][j]=ch[j]-'';
  50. }
  51. for(k=;k<=;k++)
  52. {
  53. dfs(,si,sj);//
  54. if(fl)break;
  55. }
  56. if(!fl)printf("-1\n");
  57. else printf("%d\n",k);
  58. }
  59. return ;
  60. }

bzoj1085 [SCOI2005]骑士精神——IDA*的更多相关文章

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

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

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

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

  3. 【洛谷2324】[SCOI2005]骑士精神 IDA*

    [SCOI2005]骑士精神 描述 在一个\(5×5\)的棋盘上有\(12\)个白色的骑士和\(12\)个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为 ...

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

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

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

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

  6. [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]

    题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...

  7. bzoj 1085: [SCOI2005]骑士精神 IDA*

    题目链接 给一个图, 目标位置是确定的, 问你能否在15步之内达到目标位置. 因为只有15步, 所以直接ida* #include<bits/stdc++.h> using namespa ...

  8. [BZOJ1085][SCOI2005]骑士精神 搜索

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1085 大的思路是迭代加深搜索,我们加一个明显的剪枝,当棋盘中位置不对的骑士的数目加上已经走 ...

  9. BZOJ1085: [SCOI2005]骑士精神

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

随机推荐

  1. layuiAdmin 项目修改

    layuiAdmin修改 index.js 修改登录url user/login=>publics/login config.js 修改 name 项目名称, tokenName token字段 ...

  2. python logging 日志使用

    https://docs.python.org/3/library/logging.html1.日志级别 日志一共分成5个等级,从低到高分别是:DEBUG INFO WARNING ERROR CRI ...

  3. english & utils & tools

    english & utils & tools https://openlanguage.com/ https://www.grammarly.com/blog/email-writi ...

  4. POJ1094 / ZOJ1060

    #include <cstdio> #include <cstring> #include <stack> #include <iostream> us ...

  5. Flask组件:flask-sqlalchemy & flask-script & flask-migrate

    flask-sqlalchemy组件 项目目录结构: flask目录 # 项目名 |--- flaskdir |--- static # 静态文件 |--- templates # 模板 |--- m ...

  6. 搭桥(codevs 1002)

    题目描述 Description 有一矩形区域的城市中建筑了若干建筑物,如果某两个单元格有一个点相联系,则它们属于同一座建筑物.现在想在这些建筑物之间搭建一些桥梁,其中桥梁只能沿着矩形的方格的边沿搭建 ...

  7. android开发里跳过的坑-AS导入NDK工程提示错误 No such property: sdkHandler for class: com.android.build.gradle.LibraryPlugin

    接到一个NDK工程需要调试,导入后发现总是提示错误 Error:(37, 1) A problem occurred evaluating project ':libuvccamera'.> N ...

  8. Linux下汇编语言学习笔记10 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

  9. 关于jquery stopPropagation()阻止冒泡事件

    我们经常会遇到点击两个或者多个重叠的层事件的时候,往往点击最里的的一层会接连触发外面的点击事件.这时候就需要用到stopPropagation事件即阻止冒泡事件html代码如下<!DOCTYPE ...

  10. [bzoj2463][中山市选2009]谁能赢呢?_博弈论

    博弈论 bzoj-2463 中山市选-2009 题目大意:题目链接. 注释:略. 想法: 如果$n$是偶数的话就可以被多米诺骨牌恰好覆盖,这样的话只需要先手先走向(1,1)对应的第二段,后者必定会将棋 ...