题解: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\) 表示空地.陷阱.墙,空地上可以放置守卫,如 ...
随机推荐
- uni-app中picker-view显示默认值的注意点(坑)
今天我在使用picker-view的时候,发现无法给picker-view给一个默认值:后面经过发现后: 才知道到,是一个异步问题: 1==>动态循环出来的数据,在data中直接循环,不要在re ...
- Yarn角色
一.ResourceManager ResourceManager中的调度器负责资源的分配 二.NodeManager NodeManager则负责资源的供给和隔离 ResourceManager将某 ...
- Luogu P11233 CSP-S2024 染色 题解 [ 蓝 ] [ 线性 dp ] [ 前缀和优化 ]
染色:傻逼题. 赛时没切染色的都是唐氏!都是唐氏!都是唐氏!都是唐氏!都是唐氏!都是唐氏!都是唐氏! 包括我. 真的太傻逼了这题. 我今晚心血来潮一打这题,随便优化一下,就 AC 了. 怎么做到这么蠢 ...
- Luogu P2824 排序 题解 [ 紫 ] [ 线段树 ] [ 二分 ] [ adhoc ]
排序:二分线段树神仙好题. trick 我们可以二分值域,然后把大于等于它的数标记成 \(1\),其他标记为 \(0\)(有些题需要标记成 \(-1\) ),然后根据这个来 check 方案是否可行, ...
- FreeSql学习笔记——5.删除
前言 对于FreeSql来说,删除的支持并不强大,只有在Where条件不为空的时候才执行,否则返回0或默认值,不执行删除操作: 语法 fsql.Delete<Class>( ...
- Leetcode 236. 二叉树的最近公共祖先 & 235. 二叉搜索树的最近公共祖先(Python3)
236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x ...
- 小米手机/红米手机解锁BL详细教程
由于MIUI解锁风控提升,全部小米默认为支持解锁BootLoader的 但需要登录小米账号后,到开发者选项将设备和账号绑定0-1000小时,一般默认为168小时,部分新机实际几百小时,具体绑定时间,我 ...
- 支付宝 IoT 设备入门宝典(下)设备经营篇
上篇介绍了支付宝 IoT 设备管理,但除了这些基础功能外,商户还可以利用设备进行一些运营动作,让设备更好的帮助自己,本篇就会以设备经营为中心,介绍常见的设备相关能力和问题解决方案.如果对上篇感兴趣,可 ...
- 关于普通程序员该如何参与AI学习的三个建议以及自己的实践
大部分程序员在学习大语言模型的时候都比较痛苦,感觉AI是如此之近又如此之远,仿佛能搞明白一点,又好像什么也没明白.就像我们在很远的地方看珠穆拉玛峰,感觉它就像一个不大的山包,感觉只要自己做足准备咬咬牙 ...
- bug|SCSS相关问题
参考链接 [系统学习css]scss和sass以及 less的关系,node-sass.dart-sass和sass-loader是啥