迭代加深搜索。

剪枝:当满足以下任意一个条件退出:

1.当前已搜到答案时(ans!=-1||sum==0)

2.剩余步数+1<当前局面与目标局面不同的格子数sum 时(因为n步最多改变n+1个格子)

3.当前步数>当前规定最大步数时

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 const int n=5,m=8,maxstep=15;
 5 int a[6][6],b[6][6]={{0,0,0,0,0,0},
 6     {0,1,1,1,1,1},{0,0,1,1,1,1},
 7     {0,0,0,-1,1,1},{0,0,0,0,0,1},
 8     {0,0,0,0,0,0}};
 9 int    fh[9]={0,-2,-1,1,2,2,1,-1,-2},
10     fl[9]={0,1,2,2,1,-1,-2,-2,-1};
11 int ex,ey,ans,step;
12 void swap(int,int,int,int),work(),
13   dfs(int,int,int),read();
14 int change(char),check(),pd(int,int);
15 int main(){
16     int t;
17     scanf("%d",&t);
18     for (int i=1;i<=t;i++) work();
19     return 0;
20 }
21 void work(){
22     ans=-1;read();
23     for (step=0;step<=maxstep;step++){
24         dfs(0,ex,ey);
25         if (ans!=-1) break;
26     }
27     printf("%d\n",ans);
28     return;
29 }
30 void read(){
31     char c[7];
32     for (int i=1;i<=n;i++){
33         scanf("%s",&c);
34         for (int j=0;j<n;j++){
35             a[i][j+1]=change(c[j]);
36             if (a[i][j+1]==-1){
37                 ex=i;ey=j+1;
38             }
39         }
40     }
41     return;
42 }
43 void dfs(int deep,int p,int q){
44     int x,y,sum;
45     if (ans!=-1) return;
46     sum=check();
47     if (deep==step){
48         if (!sum) ans=deep;return;
49     }
50     else if (step-deep+1<sum) return;
51     if (deep>step) return;
52     for (int i=1;i<=m;i++){
53         x=p+fh[i];y=q+fl[i];
54         if (pd(x,y)){
55             swap(x,y,p,q);
56             dfs(deep+1,x,y);
57             swap(x,y,p,q);
58         }
59     }
60 }
61 int change(char c){
62     if (c=='1') return 1;
63     if (c=='0') return 0;
64     if (c=='*') return -1;
65 }
66 int check(){
67     int sum=0;
68     for (int i=1;i<=n;i++)
69         for (int j=1;j<=n;j++)
70             if (a[i][j]!=b[i][j]) sum++;
71     return sum;
72 }
73 int pd(int p,int q){
74     if (p>=1&&q>=1&&p<=n&&q<=n) return 1;
75     return 0;
76 }
77 void swap(int x,int y,int p,int q){
78     int tmp;
79     tmp=a[x][y];a[x][y]=a[p][q];a[p][q]=tmp;
80     return;
81 }

STD

转载于:https://www.cnblogs.com/Absolute-Zero/p/5833960.html

【BZOJ1085】骑士精神相关推荐

  1. bzoj1085 骑士精神

    骑士精神 题目背景: bzoj1085 分析:迭代加深搜索,每一次枚举走多少步能够到达,每一次搜索当前步数的可行解,判断是否到达最终目标位置,加入剪枝,如果中途发现当前的差异已经大于剩余步数,则表示这 ...

  2. bzoj1085骑士精神(搜索)

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1893  Solved: 1051 Description ...

  3. [SCOI2005][BZOJ1085] 骑士精神

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1112  Solved: 604 [Submit][Sta ...

  4. 【BZOJ1085】【SCOI2005】骑士精神 [A*搜索]

    骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB [Submit][Status][Discuss] Description 在一个5×5的棋盘上有12个白色 ...

  5. BZOJ1085 [SCOI2005] 骑士精神

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

  6. 算法复习——迭代加深搜索(骑士精神bzoj1085)

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

  7. bzoj1085: [SCOI2005]骑士精神(a*)

    1085: [SCOI2005]骑士精神 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2555  Solved: 1472 [Submit][St ...

  8. [启发式搜索/A*] [SCOI2005]骑士精神题解

    洛谷-骑士精神 启发式搜索-A* 估价函数 对于当前状态,我们可以将其与目标状态对比,得到一个预估的代价,即最少(不一定满足题意)的代价,得到这个代价的函数叫做估价函数 对于一个最短路问题来说,我们可 ...

  9. 『骑士精神 IDA*』

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

  10. [luogu 2324][SCOI 2005] 骑士精神 (A*算法)

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

最新文章

  1. 使用 Trace32 对 FLASH 编程
  2. enumeration学习
  3. tinyproxy代理
  4. bartender的安全策略不允许指定的用户执行此操作_MongoDB用户和角色解释系列(上)...
  5. html5 Canvas画图教程(5)—canvas里画曲线之arc方法
  6. network 拦截不到东西是怎么做到的?_都说读中职院校学不到东西,中职学生到底是怎么学习的?...
  7. Elasticsearch-head插件的安装与使用
  8. python元组和集合的区别_python 元组与list的区别
  9. 【RobotStudio学习笔记】(十)模块化程序
  10. TortoiseSVN常见用法
  11. Filebeat Filter - Dissect/DNS Reverse
  12. 计算机应用团队,【计算机应用论文】团队合作学习下计算机应用论文(共3025字)...
  13. Unity-日志工具
  14. 王者荣耀服务器维护9月27,王者荣耀9月27日更新维护公告 修复夏洛特技能bug等...
  15. RED5学习(二)——第一个red5项目
  16. 魔法少女小圆计算机音乐,魔法少女小圆 无损音乐合集
  17. 程序员返乡卖羊肉年销售1500万元,竟然是为了爱情?
  18. SRE重案调查组 第三集 | 探秘HTTP异步请求的“潘多拉魔盒”
  19. 实体链指(3)EL:End-to-End
  20. 【matplotlib】/【plt】中文设置为宋体,英文为Time New Roman

热门文章

  1. BZOJ 1270: [BeijingWc2008]雷涛的小猫( dp )
  2. c#做端口转发程序支持正向连接和反向链接
  3. Xcode中捕获iphone/ipad/ipod手机摄像头的实时视频数据
  4. ROS project part 1: Ubuntu中安装opencv包以及相应的依赖
  5. 阿里云对数据可靠性保障的一些思考
  6. [CareerCup] 8.7 Chat Server 聊天服务器
  7. svn怎么上传文件 — 百度经验无耻推广
  8. dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》
  9. 机房收费系统的合作版
  10. ai对话机器人实现方案_显然地引入了AI —无代码机器学习解决方案