【BZOJ1085】骑士精神

迭代加深搜索。

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

    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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403119.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CH340电路设计注意事项

在前面两篇博客提到了CH340的电路设计以及芯片选型&#xff0c;本文将重点放在使用CH340芯片进行电路设计的一些细节与注意事项。 电压匹配问题 CH340 芯片通过 USB 转换出来的 TTL 串口输出和输入电压是根据芯片供电电压是自适应的。也即&#xff0c;如果芯片是 5V 供电&…

解决 Visual Studio 中代码注释自动折叠的问题

今天突发奇想&#xff0c;打算把存储过程以注释的形式放在代码中进行版本管理&#xff0c;比如下面的代码&#xff1a; 由于存储过程很长&#xff0c;注释占了很多行&#xff0c;严复影响了正常代码的排版与阅读体验。之前也遇到过这样的场景&#xff0c;当时通过手动添加regio…

Newtonsoft.Json高级用法

From: http://www.cnblogs.com/yanweidie/p/4605212.html 手机端应用讲究速度快&#xff0c;体验好。刚好手头上的一个项目服务端接口有性能问题&#xff0c;需要进行优化。在接口多次修改中&#xff0c;实体添加了很多字段用于中间计算或者存储&#xff0c;然后最终用Newtonso…

Android 经典示例,初学者的绝好源码资料

2019独角兽企业重金招聘Python工程师标准>>> Android 经典示例&#xff0c;初学者的绝好源码资料 附上源码&#xff1a; 转载:http://www.adobex.com/android/source/details/00000374.htm 转载于:https://my.oschina.net/androidcode/blog/104696

CH340 Linux驱动使用教程

在官方Linux内核版本中自Kernel2.6以后就默认包含了对CH340/CH341芯片的驱动支持了&#xff0c;但比较遗憾的是该自带驱动版本较老&#xff08;由开源社区开发者提交&#xff09;已不能满足使用需求了&#xff0c;因此我们需要用芯片官网提供的新驱动进行替换链接。 1. 首先去…

h5开发实时预览;真机调试开发;拼接ip的地址直接微信打开或者浏览器打开也可以实时预览

http://192.168.10.135:2277/#/Write1 本地启动vue项目 将地址栏复制 放在微信开发者工具 可以借助微信开发者工具预览 找到自己电脑的ip 也可以电脑输入自己的ip和对应端口号地址进行预览 最后将拼接ip和端口号的地址直接微信打开或者浏览器打开也可以实时预览

python基础2

本节内容 列表、元组操作字符串操作字典操作集合操作文件操作字符编码与转码 一、列表、元组操作 列表是我们最以后最常用的数据类型之一&#xff0c;通过列表可以对数据实现最方便的存储、修改等操作 定义列表 >>> name [hongpeng,21,ops] 通过下标访问列表中的元素…

element-ui嵌套弹框遮罩层解决

:modal-append-to-body“false” :append-to-body“true” 嵌套的 Dialog 必须指定该属性并赋值为 true <template><el-button type"text" click"outerVisible true">点击打开外层 Dialog</el-button><el-dialog title"外层 D…

Linux 串口调试工具汇总

在 linux 系统下进行串口调试或者开发时配合简单易用的串口调试工具那是必不可少。这篇博客对当前用的较多的&#xff0c;且我自己经常用的一些串口工具做一下汇总&#xff0c;大家可以参考一下。 实验环境&#xff1a; OS: Ubuntu16.04 Kernel: 4.4.0 --------------------…

[翻译] effective go 之 Names Semicolons

2019独角兽企业重金招聘Python工程师标准>>> Names Names are as important in Go as in any other language. In some cases they even have semantic effect: for instance, the visibility of a name outside a package is determined by whether its first cha…

75.Android之基本架构

转载&#xff1a;http://www.cnblogs.com/lijunamneg/archive/2013/01/18/2866953.html Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik&#xff0c;并在Dalvik虚拟机上搭建了一个JAVA的application framework&#xff0c;所有的应用程序都是基于JAVA的applicati…

TTL转485电路设计

在 TTL/CMOS 转接半双工 RS485 的电路设计中&#xff0c;由于半双工的特性&#xff0c;需要有信号来控制 485 转接芯片的发送和接收使能端&#xff0c;因此需要具体场景具体分析。 如果是使用 MCU 或者自带发送状态指示脚功能&#xff08;指示当前是否在进行串口发送&#xff0…

flash 动画

浏览着网页不知道该干些什么&#xff0c;突然看到好看的flash动画&#xff0c;其实虽然自己编程序&#xff0c;可是真的觉得很羡慕那些美工同事&#xff0c;做的东东真的很漂亮。看着讲解做着做着&#xff0c;唉&#xff0c;跟人家的对不上了&#xff0c;呵呵&#xff0c;成了另…

USB芯片选型

从 USB 芯片的使用角度来说&#xff0c;USB 系列芯片可以划分为 USB 接口芯片与内置 USB 功能的微控制器。前者对于跨平台和易用性方面比较有优势&#xff0c;无需了解芯片内部工作机制&#xff0c;按照芯片的手册以及官方例程来操作就可以了&#xff0c;而使用平台也比较开放&…

CH340安卓驱动使用教程

使用 CH340/CH341 可以很容易在 Android 平台下实现 USB 转串口的功能&#xff0c;由于 CH340/CH341 是 USB 设备&#xff0c;如果使用手机或者平板来操作该芯片的话&#xff0c;就需要满足以下需求&#xff1a; 1. 需要基于 Android 3.1 及以上的系统 2. Android 设备具有 U…

undefined reference to

关于undefined reference这样的问题&#xff0c;大家其实经常会遇到&#xff0c;在此&#xff0c;我以详细地示例给出常见错误的各种原因以及解决方法&#xff0c;希望对初学者有所帮助。 1. 链接时缺失了相关目标文件&#xff08;.o&#xff09; 测试代码如下&#xff1a; 然…

Android 系统使用USB OTG功能/打开USB Host API功能

步骤一&#xff1a;确定 Android 设备是否支持 USB Host 功能&#xff0c;具体可以通过以下步骤进行确认&#xff1a; 1. 查看手机或平板设备参数&#xff0c;或者直接联系厂家咨询&#xff1b; 2. 使用 UsbHostDiagnostics.APK 安卓应用软件直接进行检测&#xff0c;汉化版软件…

Android日志Log使用

Android开发中日志工具的使用是十分重要的&#xff0c;可以帮助我们定位和查找程序执行的问题&#xff0c;了解程序执行过程等。这里以 Eclipse 下的的安卓开发为例进行说明。 打开 LogCat 功能 首先&#xff0c;确保 Eclipse 软件中已经打开了日志工具 LogCat 功能&#xff…

Android项目目录结构

在 Eclipse 中新建或者打开一个 Android 项目&#xff0c;可以看到目录视图如下所示&#xff1a; 其实项目开发中&#xff0c;使用频率较高的并不多&#xff0c;我们只要了解清楚不同类型的文件和不同目录的对应关系就可以了。 1. src src 目录用于存放 Java 代码&#xff0…

Libusb开发教程二 API介绍与使用

背景介绍 上一篇博文主要介绍了 Libusb 在 Linux 系统下的详细安装过程&#xff0c;除了 libusb-1.0.9.tar.bz2 离线包之外&#xff0c;还安装了 libusb-compat-0.1.4.tar.bz2。顾名思义&#xff0c;第二个是先前版本的兼容包&#xff0c;因此在使用过程中&#xff0c;开发者就…