题解:UVA11214 守卫键盘 Guarding the Chessboard
题意:输入一个 n×mn\times mn×m 棋盘,某些格子有标记。用最少的皇后守卫(即占据或者攻击)所有带标记的格子。
分析:因为不知道放几个皇后可以守卫所有带标记的格子,即回溯法求解时解答树的深度没有明显的上限,所以使用迭代加深搜索。
将棋盘的每个格子标记为 0∼n×m−10\sim n\times m-10∼n×m−1,依次枚举守卫的皇后个数,枚举当前守卫的皇后个数下所有的放置情况,看是否能全部守卫。(枚举方式:iii 枚举 1∼n1\sim n1∼n,jjj 枚举 i+1∼ni+1\sim ni+1∼n)
AC code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1005;
string s[maxn];
int vis[maxn][maxn];
int v[maxn][maxn];
int t;
int n,m;
bool check(){
for(int i=0;i<n;i++){//判断所有被标记的正方形是否被保护
for(int j=0;j<m;j++){
if(v[i][j]&&!vis[0][i]&&!vis[1][j]&&!vis[2][j+i]&&!vis[3][j-i+n])
return 0;
}
}
return 1;
}
bool dfs(int cur,int pos,int tot){
if(cur==tot){//放置tot个皇后是否可全保护
if(check()){
cout<<"Case "<<t<<": "<<tot<<endl;
return 1;
}
return 0;
}
for(int i=pos;i<=n*m;i++){//所有点被标记成0~n*m-1
int x=i/m;//当前位置的横坐标
int y=i%m;
int tmp1=vis[0][x];
int tmp2=vis[1][y];
int tmp3=vis[2][x+y];
int tmp4=vis[3][y-x+n];
vis[0][x]=vis[1][y]=vis[2][x+y]=vis[3][y-x+n]=1;
if(dfs(cur+1,i+1,tot)){
return 1;//此处优化,i+1下次枚举是当前位置再加1,避免情况重复
}
vis[0][x]=tmp1;
vis[1][y]=tmp2;
vis[2][x+y]=tmp3;
vis[3][y-x+n]=tmp4;
}
return 0;//枚举当前所有情况不满足
}
signed main(){
while(cin>>n){
if(n==0){
break;
}
t++;
cin>>m;
memset(v,0,sizeof(v));
for(int i=0;i<n;i++){
cin>>s[i];
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(s[i][j]=='X'){
v[i][j]=1;
}
}
}
for(int i=0;;i++){
memset(vis,0,sizeof(vis));
if(dfs(0,0,i)){
break;
}
}
}
return 0;
}
题解:UVA11214 守卫键盘 Guarding the Chessboard的更多相关文章
- 【习题 7-10 Uva11214】Guarding the Chessboard
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 迭代加深搜索. 可以想见最后深度不会很深吧.. 然后皇后之间互相攻击到是允许的.. 就这样 [代码] /* 1.Shoud it u ...
- UVA - 11214 Guarding the Chessboard(守卫棋盘)(迭代加深搜索)
题意:输入一个n*m棋盘(n,m<10),某些格子有标记.用最少的皇后守卫(即占据或者攻击)所有带标记的格子. 分析:因为不知道放几个皇后可以守卫所有带标记的格子,即回溯法求解时解答树的深度没有 ...
- UVA-11214 Guarding the Chessboard (迭代加深搜索)
题目大意:在一个国际象棋盘上放置皇后,使得目标全部被占领,求最少的皇后个数. 题目分析:迭代加深搜索,否则超时. 小技巧:用vis[0][r].vis[1][c].vis[2][r+c].vis[c- ...
- UVA 11214 Guarding the Chessboard 守卫棋盘(迭代加深+剪枝)
暴力,和八皇后很像,用表示i+j和i-j标记主对角线,但是还是要加一些的剪枝的. 1.最裸的暴搜 6.420s,差点超时 2.之前位置放过的就没必要在放了,每次从上一次放的位置开始放 0.400s # ...
- UVA - 11214 Guarding the Chessboard(迭代加深搜索)
题目: 输入一个n*m的棋盘(n,m<10),某些格子有标记,用最少的皇后守卫(即占据或攻击)所有的标记的格子.输出皇后的个数. 思路: 一开始没有想到用迭代加深搜索,直接dfs结果还没写完就发 ...
- UVA 11214 Guarding the Chessboard
题意: 皇后防御的范围是他所在横.竖.对角线,地图上的#为可以放旗子的地方.问最少放几个皇后能防守所有#. 分析: vis数组开4维,对应行.列.主对角线.副对角线 代码: #include < ...
- Guarding the Chessboard(UVa 11214)
本题题意: 输入一个n*m的棋盘,某些格子有标记,用最少的皇后占据或者攻击所以带标记的格子.皇后的攻击范围为同行同列和同对角线. 可以使用IDA*算法,即从样例可以发现只需要最多5个棋子就可以对棋盘上 ...
- UVA - 11214 Guarding the Chessboard (可重复覆盖,DLX+IDA*)
题目链接 正解是IDA*+四个方向判重,但由于是个裸的可重复覆盖问题,可以用DLX水过~ 每个格子与放上皇后能干掉的标记连边,跑可重复覆盖DLX.注意要用IDA*来优化,否则会超时. #include ...
- Solution: 题解 CF1196E Connected Component on a Chessboard
感觉这题还可以 因为总空间比输入数量 不知高到哪里去了 ,所以完全不需要考虑放不下的问题 从贪心的角度考虑,如果要使相差数量巨大的\(b\)和\(w\)能够成功放下来,应该使这些方块尽量分散(似乎有点 ...
- 【题解】宫廷守卫 [P1263]
[题解]宫廷守卫 [P1263] 传送门:宫廷守卫 \([P1263]\) [题目描述] 给出一个 \(n*m\) 的方格图,分别用整数 \(0,1,2\) 表示空地.陷阱.墙,空地上可以放置守卫,如 ...
随机推荐
- tomcat配置用户名密码
1.配置tomcat-user.xml<role rolename="manager-gui"/><role rolename="manager-scr ...
- intellij debug模式提示 Method breakpoints may dramatically slow down debugging 解决办法
直接上图........ 点击图中按钮 或者 快捷键(Ctrl - Shift -F8 ) 出现下图
- Qt QVariant 与 自定义类型转换的方法
Example: 1. 声明自定义类型可用于QVariant,类也能用,也是这样,QT的基本数据类型不用声明就可以用,而且存入是什么类型,拿出来还是什么类型 #include <QMetaTyp ...
- Linux - centos6.6不使用ssh如何在服务器之间传输文件?
根据上一篇的设定,如果升级openssh失败之后,又无法使用ssh,该怎么传输文件呢? 可以使用busybox进行文件传输,首先需要准备两台centos6.6服务器:ctos66-01和ctos66- ...
- 【自荐】Catime v1.0.4 一款贼好用的计时器
Github: https://github.com/vladelaina/Catime 仅1.3MB!!!!! 特点 极简设计: 透明界面.点击穿透.可调大小和位置.多语言支持 丰富字体: 47种字 ...
- [vue系列]-vue+vue-i18n+elementUI 国际化
前言 vue+vue-i18n实现多语言 本文主要内容 安装 多语言配置 element 内置语言国际化 踩到的坑以及解决方案 安装 npm install vue-i18n 配置 1.i18n.js ...
- PHP开发技巧:如何实现数据过滤功能
输入过滤 输出过滤 1.输入过滤 1.1前端验证 JavaScript的方式,正则等,(略) 1.2后端验证 1.2.1 使用filter_var函数 PHP提供了filter_var函数用于过滤和验 ...
- PHP将变量存储在数据库中,读取并执行变量的方法
http://www.edbiji.com/doccenter/showdoc/4/nav/1214.html 例如将下边的字符串存储到数据库中您好,您的验证码是".$authcode.&q ...
- 在 Mac 上解决 LM Studio 无法下载模型的问题(国内镜像替换教程)
如果你在使用 LM Studio 时遇到类似 There was an error fetching results from Hugging Face 或 Model details error: ...
- 超详细移动端侧AI口罩识别实现与部署(含源码)
开发环境 数据标注:label studio :https://labelstud.io/ 模型训练:tensorflow 附完整的训练源码和数据 部署开发:Android studio + tens ...