uva 11214
2015-08-21 09:54
218 查看
#include <bits/stdc++.h> using namespace std; const int maxn = 11; int n, m, t, maxd, kase; bool G[maxn][maxn], vis[4][maxn * 2]; bool guard() { for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) if (G[i][j] && ! vis[0][i] && !vis[1][j] && !vis[2][i + j] && !vis[3][i - j + maxn]) return false; } bool dfs(int i, int j, int d) { if (d == maxd) if (guard()) return true; else return false; for (; i < n; i++, j %= m) for (; j < m; j++) { bool tmp1 = vis[0][i], tmp2 = vis[1][j], tmp3 = vis[2][i + j], tmp4 = vis[3][i - j + maxn]; vis[0][i] = vis[1][j] = vis[2][j + i] = vis[3][i - j + maxn] = 1; if (dfs(i, j + 1, d + 1)) return true; vis[0][i] = tmp1, vis[1][j] = tmp2, vis[2][i + j] = tmp3, vis[3][i - j + maxn] = tmp4; } return false; } int main(int argc, char const *argv[]) { while (cin >> n && n) { cin >> m; cin.get(); for (int i = 0; i < n; cin.get(), i++) for (int j = 0; j < m; j++) G[i][j] = (cin.get() == 'X' ? 1 : 0); for (maxd = 0; maxd < 5; ++maxd) { memset(vis, 0, sizeof(vis)); if (dfs(0, 0, 0)) break; } cout << "Case " << ++kase << ": " << maxd << endl; } return 0; }
最多5个皇后
相关文章推荐
- 一个非常不友好的SQL的优化改写
- CDMA系统的远近效应问题
- Spring源代码解析(收藏)
- Spring注解@Component、@Repository、@Service、@Controller区别
- Win10 10525预览版桌面上的水印怎么删除?
- 开源平台选型建议
- 阐明iOS证书和provision文件
- C++ map的基本操作和使用
- LeetCode题解:ZigZag Conversion
- LeetCode题解:Ugly Number
- ubuntu笔记
- POJ2528 Mayor's posters(线段树成段替换,区间查询,离散化简单hash)
- 黑马程序员--抽象类与接口
- 磁盘阵列RAID理解
- WinForm中BackgroundWorker控件用法简单实例
- Gradle笔记——Gradle的简介与安装
- Leetcode: Populating Next Right Pointers in Each Node
- empty isset is_null
- pyrDown和pyrUp函数
- 2015阿里研发实习 附加题