UVA-11214 IDA*
利用迭代加深搜索,枚举需要的皇后数量,进行搜索。
对于10 * 10 的棋盘,最多需要5个皇后就能攻击整个棋盘,当0~4个皇后都不能搜索成功,那么5就不用搜索,直接打印。
AC代码:
#include<cstdio>
#include<cstring>
const int maxn = 15;
int vis[4][maxn << 1];
char G[maxn][maxn];
int n, m;
bool guard(){
for(int i = 0; i < n; ++i)
for(int j = 0; j < m; ++j){
if(G[i][j] != 'X') continue;
if(vis[0][i] || vis [1][j] || vis[2][i + j] || vis[3][i - j + maxn]) continue;
return false;
}
return true;
}
int maxd; //限制皇后数量
bool dfs(int x, int y, int d){
if(d == maxd) return guard();
for(int i = x; i < n; ++i){
for(int j = y; j < m; ++j) {
int a = vis[0][i], b = vis[1][j], c = vis[2][i + j], e = vis[3][i - j + maxn];
vis[0][i] = vis[1][j] = vis[2][i + j] = vis[3][i - j + maxn] = 1;
if(dfs(i, j + 1, d + 1)) return true;
vis[0][i] = a, vis[1][j] = b, vis[2][i + j] = c, vis[3][i - j + maxn] = e;
}
y = 0;
}
return false;
}
int main(){
int kase = 1;
while(scanf("%d", &n) == 1 && n){
scanf("%d", &m);
memset(vis, 0, sizeof(vis));
for(int i = 0; i < n; ++i) scanf("%s", G[i]);
for(maxd = 0; maxd < 5; ++maxd){
if(dfs(0, 0, 0)) break;
}
printf("Case %d: %d\n", kase++, maxd);
}
return 0;
}
如有不当之处欢迎指出!
UVA-11214 IDA*的更多相关文章
- UVA - 11214 Guarding the Chessboard (可重复覆盖,DLX+IDA*)
题目链接 正解是IDA*+四个方向判重,但由于是个裸的可重复覆盖问题,可以用DLX水过~ 每个格子与放上皇后能干掉的标记连边,跑可重复覆盖DLX.注意要用IDA*来优化,否则会超时. #include ...
- UVA 11212 IDA*
移动一块连续的区间使得数列递增.问最少次数. 直接IDA*暴搜,只是我没有想到A*函数,所以就随手写了个连续递增块数作为估价函数,WA了,然后除以2,还是WA,除以3,WA,除以4...过了= = # ...
- Guarding the Chessboard(UVa 11214)
本题题意: 输入一个n*m的棋盘,某些格子有标记,用最少的皇后占据或者攻击所以带标记的格子.皇后的攻击范围为同行同列和同对角线. 可以使用IDA*算法,即从样例可以发现只需要最多5个棋子就可以对棋盘上 ...
- Editing a Book UVA - 11212 IDA*
You have n equal-length paragraphs numbered 1 to n . Now you want to arrange them in the order of 1 ...
- UVA 11214 Guarding the Chessboard
题意: 皇后防御的范围是他所在横.竖.对角线,地图上的#为可以放旗子的地方.问最少放几个皇后能防守所有#. 分析: vis数组开4维,对应行.列.主对角线.副对角线 代码: #include < ...
- 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结果还没写完就发 ...
- 紫书 习题7-8 UVa 12107 (IDA*)
参考了这哥们的博客 https://blog.csdn.net/hyqsblog/article/details/46980287 (1)atoi可以char数组转int, 头文件 cstdlib ...
- UVA - 11214 Guarding the Chessboard(守卫棋盘)(迭代加深搜索)
题意:输入一个n*m棋盘(n,m<10),某些格子有标记.用最少的皇后守卫(即占据或者攻击)所有带标记的格子. 分析:因为不知道放几个皇后可以守卫所有带标记的格子,即回溯法求解时解答树的深度没有 ...
- 【Uva 12558】 Egyptian Fractions (HARD version) (迭代加深搜,IDA*)
IDA* 就是iterative deepening(迭代深搜)+A*(启发式搜索) 启发式搜索就是设计估价函数进行的搜索(可以减很多枝哦~) 这题... 理论上可以回溯,但是解答树非常恐怖,深度没有 ...
随机推荐
- Spark 读写hive 表
spark 读写hive表主要是通过sparkssSession 读表的时候,很简单,直接像写sql一样sparkSession.sql("select * from xx") 就 ...
- 【Java SE】如何安装JDK以及配置Java运行环境
摘要:不管是作为苦逼的Java码农,还是高端大气的Java系统架构师,如果不会安装JDK以及配置Java运行环境,那就巧妇难为无米之炊,不能进行Java后续的代码编写.当然如果你是Myeclipse编 ...
- wget实例
问题:下载http://web.utah.edu/thorne/computing/网页中所有的文件 命令:wget -c -r -np -k -L -p http://web.utah.edu/th ...
- Hello 2018
愈发觉得写技术博客对于自己写作能力的提升会很有帮助,于是在今天终于用Github+Jekyll的方式搭建了自己的博客,从今往后就在这里记录自己在技术上成长的点滴,希望自己的总结和思考也能帮助到其他人. ...
- Oracle 12cR1 RAC 在VMware Workstation上安装(下)—静默安装
Oracle 12cR1 RAC 在VMware Workstation上安装(下)—静默安装 1.1 静默安装 1.1.1 静默安装grid 安装之前使用脚本进行校验,确保所有的failed选项 ...
- css模板
最近好多人问我博客的css模板.... 现在是高三,没多少时间,趁放假赶紧更一下 主体就是把博客园的一个模板改动了一点 上面的图片特效,也是从别人那里得到的代码,大致就是下面那些,下面的三个图片换成自 ...
- [Sdoi2017]树点涂色 [lct 线段树]
[Sdoi2017]树点涂色 题意:一棵有根树,支持x到根染成新颜色,求x到y颜色数,求x子树里点到根颜色数最大值 考场发现这个信息是可减的,但是没想到lct 特意设计成lct的形式! 如何求颜色数? ...
- git恢复误删除文件
在git仓库管理下误删除文件一般会分为以下3种情况: 1.手动直接删掉,如选择-右击-删除 这种删除未修改本地仓库[版本库],只修改了工作区,直接git checkout -- fileName即可恢 ...
- Selenium_Java版本安装及初试
[环境] ①JDK版本:jdk1.8.0_73 ②Eclipse:jee-mars-4.5.2 ③Selenium:selenium-java-3.5.3 ④GoogleChrome:60 ⑤chro ...
- S5PV210中断处理
_start: 1.设置栈空间:防止之前的UBOOT代码被覆盖,应为c中需要栈空间 ldr sp, =0x40010000 2.设置CPSR的I,F位,A8打开IRQ,FIQ中断: mov r0, # ...