uva 639 Don't Get Rooked 变形N皇后问题 暴力回溯
题目:跟N皇后问题一样,不考虑对角冲突,但考虑墙的存在,只要中间有墙就不会冲突。
N皇后一行只能放一个,而这题不行,所以用全图暴力放棋,回溯dfs即可,题目最多就到4*4,范围很小。
刚开始考虑放一个棋子后就把其他不能放的地方标记下,然后再暴力,后来发现如果一个点重复标记在去标记时就会把点标成合法的,于是改用放棋子是进行检查,由于数据量小,也不会占用多少时间。
之后才想到,在标记时可以用累加的,去标记时再一个一个减下来即可。。。
代码:
#include <cstdio> const int maxn = 5;
char map[maxn][maxn];
int ans, n; bool isok(int x, int y) {
for (int i = x + 1; i <= n && map[i][y] != 'X'; i++)
if(map[i][y] == '0')
return false;
for (int i = x - 1; i >= 1 && map[i][y] != 'X'; i--)
if(map[i][y] == '0')
return false;
for (int i = y; i <= n && map[x][i] != 'X'; i++)
if (map[x][i] == '0')
return false;
for (int i = y - 1; i >= 1 && map[x][i] != 'X'; i--)
if (map[x][i] == '0')
return false;
return true;
} void dfs(int x, int y, int p) {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (map[i][j] == '.' && isok(i, j)) {
map[i][j] = '0';
dfs(i, j, p + 1);
map[i][j] = '.';
}
if (ans < p)
ans = p;
} int main() {
while (scanf("%d", &n) && n) {
gets(map[0]);
for (int i = 1; i <= n; i++)
gets(map[i] + 1);
ans = 0;
dfs(1, 1, 0);
printf("%d\n", ans);
}
return 0;
}
uva 639 Don't Get Rooked 变形N皇后问题 暴力回溯的更多相关文章
- UVA 11280 - Flying to Fredericton SPFA变形
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&c ...
- UVA 639 (13.08.25)
Don't Get Rooked In chess, the rook is a piece that can move any number of squaresvertically or ho ...
- UVA Don't Get Rooked
主题如以下: Don't Get Rooked In chess, the rook is a piece that can move any number of squaresverticall ...
- UVa 1395 - Slim Span(最小生成树变形)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- uva 10723 Cyborg Genes(LCS变形)
题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=107450#problem/C 题意:输入两个字符串,找一个最短的串,使得输入的两个 ...
- 紫书 习题 11-7 UVa 10801 (单源最短路变形)
把每个电梯口看作一个节点, 然后计算边的权值的时候处理一下, 就ok了. #include<cstdio> #include<vector> #include<queue ...
- Uva 1471 Defense Lines(LIS变形)
题意: 给你一个数组,让你删除一个连续的子序列,使得剩下的序列中有最长上升子序列, 求出这个长度. 题解: 预处理:先求一个last[i],以a[i]为开始的合法最长上升子序列的长度.再求一个pre[ ...
- uva 301 Transportation 铁路公司的阳谋 纯dfs暴力
题目比较难理解. 给出铁路的容量和站点数,以及几笔订单,要求算出如何盈利最大. 咋一看想贪心,但无法确定是最优解啊. 于是用dfs做,就两种状况,选与不选,先开一个每个站点的当前人数数组,假设要选,然 ...
- Chinese Mahjong UVA - 11210 (暴力+回溯递归)
思路:得到输入得到mj[]的各个牌的数量,还差最后一张牌.直接暴力枚举34张牌就可以了. 当假设得到最后一张牌,则得到了的牌看看是不是可以胡,如果可以胡的话,就假设正确.否者假设下一张牌. 关键还是如 ...
随机推荐
- yacc和lex在ubuntu上安装
在编译boa webserver源码的时候./configure的过程中遇到找不到yacc的提示. 采用以下失败: sudo apt-get install yacc lex 应替换为: sudo ...
- solaris11.2下编译QT-配置命令
1.make 版本为:GNU Make 3.82 2.gcc版本是:3.4.3(pkg install ...) 2.直接./configue是不行的 解决:./configue -platform ...
- POJ3253 Fence Repair(贪心)
分割木板的顺序是自由的,所以每次选择两块最短的板,组合在一起,增加队列,原来两个板出队,直到队列中为空或者仅仅剩下一个板时结束.这里使用优先队列较为方便. #include<iostream&g ...
- 海量数据解决思路之BitMap
一.概述 本文将讲述Bit-Map算法的相关原理,Bit-Map算法的一些利用场景,例如BitMap解决海量数据寻找重复.判断个别元素是否在海量数据当中等问题.最后说说BitMap的特点已经在各个场景 ...
- Windows消息传递函数SendMessage参数属性
Windows消息传递函数SendMessage参数属性 转载于:http://www.cr173.com/html/5605_1.html Windows是一个消息驱动式系统,SendMessage ...
- 常用的sql server规范
常见的字段类型选择1.字符类型建议采用varchar/nvarchar数据类型2.金额货币建议采用money数据类型3.科学计数建议采用numeric数据类型4. 自增长标识建议采用bigint数据类 ...
- jQuery源码笔记——数据缓存
数据缓存是为了解决内存泄露,他的原理是,当我们将数据存储到一个对象上面,实际上是将所有的数据存到一个单独的数据对象里,而这个对象只提供一个接口,这个接口可以访问自己存在数据对象里自己的数据. 这是一个 ...
- html标签总结。
接触了一段时间的html和css,发现了其中的乐趣.在写代码时一定要仔细,很有可能一个细微的错误便会导致页面的错误 总结了一下html标签. <html></html> 创建一 ...
- 在SQL Server 2008 中使用SQL脚本创建登录用户并授权
到处都使用超级用户sa显然是不安全的,因此有创建用户并让其只能访问某个数据库的必要.当然可以使用SQL Server自带的图形界面向导,但是太难用用了!有时候代码比较直接,比如这里: --使用已经创建 ...
- Spring-----Spring Jar包
转载自:http://blog.csdn.net/hekewangzi/article/details/51713110