UVA 11214 Guarding the Chessboard
题意:
皇后防御的范围是他所在横、竖、对角线,地图上的#为可以放旗子的地方。问最少放几个皇后能防守所有#。
分析:
vis数组开4维,对应行、列、主对角线、副对角线
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
int map[15][15];
int vis[4][30];
int n,m;
int maxn;
int kase;
int same()//判断是否能防守所有#
{
int i,j,k;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(map[i][j]&&!vis[0][i]&&!vis[1][j]&&!vis[2][i+j]&&!vis[3][n+j-i])
return 0;
return 1;
}
int dfs(int d,int cur,int l)//d代表放第几个皇后,cur代表皇后放在那,cur/m为横坐标,cur%m为纵坐标,l代表总共有几个皇后。
{
int i,j,k;
if(d==l)
{
if(same())
{
printf("Case %d: %d\n",++kase,d);
return 1;
}
return 0;
}
else
{
for(i=cur;i<n*m;i++)
{
int x=i/m,y=i%m;
int tmp1=vis[0][x],tmp2=vis[1][y],tmp3=vis[2][x+y],tmp4=vis[3][n-x+y];
vis[0][x]=vis[1][y]=vis[2][x+y]=vis[3][n-x+y]=1;
if(dfs(d+1,i,l))
return 1;
vis[0][x]=tmp1,vis[1][y]=tmp2,vis[2][x+y]=tmp3,vis[3][n-x+y]=tmp4;
}
}
return 0;
}
int main()
{
kase=0;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
int i,j; memset(vis,0,sizeof(vis));
memset(map,0,sizeof(map));
string s;
for(i=0;i<n;i++)
{
cin>>s;
for(j=0;j<m;j++)
{
if(s[j]=='X')
map[i][j]=1;
}
}
for(maxn=0;;maxn++)
{
memset(vis,0,sizeof(vis));
if(dfs(0,0,maxn))
{
break;
}
}
}
}
UVA 11214 Guarding the Chessboard的更多相关文章
- UVA - 11214 Guarding the Chessboard (可重复覆盖,DLX+IDA*)
题目链接 正解是IDA*+四个方向判重,但由于是个裸的可重复覆盖问题,可以用DLX水过~ 每个格子与放上皇后能干掉的标记连边,跑可重复覆盖DLX.注意要用IDA*来优化,否则会超时. #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结果还没写完就发 ...
- UVA - 11214 Guarding the Chessboard(守卫棋盘)(迭代加深搜索)
题意:输入一个n*m棋盘(n,m<10),某些格子有标记.用最少的皇后守卫(即占据或者攻击)所有带标记的格子. 分析:因为不知道放几个皇后可以守卫所有带标记的格子,即回溯法求解时解答树的深度没有 ...
- Guarding the Chessboard(UVa 11214)
本题题意: 输入一个n*m的棋盘,某些格子有标记,用最少的皇后占据或者攻击所以带标记的格子.皇后的攻击范围为同行同列和同对角线. 可以使用IDA*算法,即从样例可以发现只需要最多5个棋子就可以对棋盘上 ...
- UVA-11214 Guarding the Chessboard (迭代加深搜索)
题目大意:在一个国际象棋盘上放置皇后,使得目标全部被占领,求最少的皇后个数. 题目分析:迭代加深搜索,否则超时. 小技巧:用vis[0][r].vis[1][c].vis[2][r+c].vis[c- ...
- 【习题 7-10 Uva11214】Guarding the Chessboard
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 迭代加深搜索. 可以想见最后深度不会很深吧.. 然后皇后之间互相攻击到是允许的.. 就这样 [代码] /* 1.Shoud it u ...
- UVA 12633 Super Rooks on Chessboard [fft 生成函数]
Super Rooks on Chessboard UVA - 12633 题意: 超级车可以攻击行.列.主对角线3 个方向. R * C 的棋盘上有N 个超级车,问不被攻击的格子总数. 行列好好做啊 ...
- UVA 10620 - A Flea on a Chessboard(鸽笼原理)
UVA 10620 - A Flea on a Chessboard 题目链接 题意:给定一个跳蚤位置和移动方向.如今在一个国际象棋棋盘上,左下角为黑格,一个格子为s*s,推断是否能移动到白格子.问要 ...
随机推荐
- pom.xml配置
1:头部引用 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3 ...
- poj1201/zoj1508/hdu1384 Intervals(差分约束)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Intervals Time Limit: 10 Seconds Mem ...
- 豆瓣FM duilib版
最近duilib项目被复制到了github上,仿佛又多了些活力.想要总结以前的项目的同时因为很喜欢豆瓣的FM,所以打算做个duilib版本豆瓣FM. 在网上了看到了很多豆瓣的不同版本,node.js. ...
- linux下python多版本共存
为何要安装python,linux下不是已经集成了python吗? 大多数linux系统都集成了python,但是他们的版本太低了.不能满足我们的需求,尤其是好多系统居然仍停留在 python2.6. ...
- js编程风格
1.缩进层级,建议四个空格. 2.语句结尾使用分号. 3.行的长度不超过80个字符. 4.换行建议加两个缩进,即8个空格. 5.合理的利用空行. 6.命名: 6.1 变量,驼峰式大小写,有小写字母开始 ...
- 论JS的重要性
最近有学习了JavaScript,学习的过程中发现js对于前端工程师来说可以是最终要的一部分. 个人认为js就是一门语言,如果把前端比作一个人的身体,那么html就是一个人的结构,css就是这个人长的 ...
- ES6新特性-------解构、参数、模块和记号(续)
六.解构 解构提供了一个方便的地从对象或数组中提取数据的方法,请看下面的例子: //ES6 let [x,y]=[1,2];//x=1,y=2 //ES5 var arr=[1,2]; var x=a ...
- C#中给线程传值并启动
方法1: ParameterizedThreadStart 委托+Thread.Start 方法 (Object) private void btnLogin_Click(object ...
- Grunt制作个人博客简集
原文:http://www.gbtags.com/gb/share/4916.htm GitHub地址:http://yansm.github.io/fromone/
- hdu 1595 find the longest of the shortest(dijkstra)
Problem Description Marica is very angry with Mirko because he found a new girlfriend and she seeks ...