蓝桥-BASIC-27-2n皇后问题
来源:互联网 发布:淘宝怎么看买家秀 编辑:程序博客网 时间:2024/06/10 12:10
ACM模版
描述
题解
一道水题,本来不打算写,但是发现是经典的8皇后问题的延伸,感觉挺不错的,所以写写玩……想当初最开始学习 dfs 就是通过八皇后问题来学习的。
依然是逐行判断,不过需要同时放两个皇后才能继续深入搜索……
代码
#include <iostream>#include <queue>#include <cstring>#include <cstdio>using namespace std;const int MAXN = 10;int map[MAXN][MAXN];int visB[MAXN];int visW[MAXN];int n;int cnt = 0;bool charge(int row, int col, int tag){ if (map[row][col] != 1) { return false; } if (tag == 2 && visB[col]) { return false; } if (tag == 3 && visW[col]) { return false; } for (int i = 0; i < n; i++) { if (row - i > 0 && row - i <= n && col + i > 0 && col + i <= n) { if (tag == map[row - i][col + i]) { return false; } } } for (int i = -n + 1; i < 0; i++) { if (row + i > 0 && row + i <= n && col + i > 0 && col + i <= n) { if (tag == map[row + i][col + i]) { return false; } } } return true;}void dfs(int row){ if (row > n) { cnt++;// cout << cnt << '\n';// for (int i = 1; i <= n; i++)// {// for (int j = 1; j <= n; j++)// {// cout << map[i][j] << ' ';// }// cout << '\n';// } return ; } for (int i = 1; i <= n; i++) { if (charge(row, i, 2)) { map[row][i] = 2; visB[i] = 1; for (int j = 1; j <= n; j++) { if (charge(row, j, 3)) { map[row][j] = 3; visW[j] = 1; dfs(row + 1); map[row][j] = 1; visW[j] = 0; } } map[row][i] = 1; visB[i] = 0; } }}int main(){ cin >> n; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { scanf("%d", map[i] + j); } } dfs(1); cout << cnt << '\n'; return 0;}
阅读全文
0 0
- 蓝桥-BASIC-27-2n皇后问题
- [BASIC-27] 2n皇后问题
- 蓝桥杯 BASIC-27 基础练习 2n皇后问题
- 基础练习 BASIC-27 2n皇后问题
- BASIC-27VIP试题 2n皇后问题
- 蓝桥杯练习题 BASIC-27 2n皇后问题(八皇后问题 搜索)
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2N皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- 2n皇后问题
- [leetcode]: 9. Palindrome Number
- i miss you
- sublime text3中中文件名显示为方框,如何解决?
- Kotlin Reference (二) idioms 一些常用方式
- 如何节省内存空间
- 蓝桥-BASIC-27-2n皇后问题
- react路由提高(Prompt、Redirect、match、Switch)
- xml生成
- 动态顺序表(C语言实现)
- leetcode 42. Trapping Rain Water
- 解决oracle速度变慢
- angular2 Http请求
- [LeetCode] Unique Paths II 起点与终点确定的路径数II
- 插入法 排列 linked list