ACM-ICPC寒假算法训练1:搜索专题 黑白皇后问题(进一步思考深度遍历)
发布日期:2021-05-07 02:18:40 浏览次数:26 分类:精选文章

本文共 1218 字,大约阅读时间需要 4 分钟。

2*n皇后问题

#define _CRT_SECURE_NO_WARNINGS#include 
const int maxn = 10;int n, ans, mp[maxn][maxn];int col_black[maxn], diag1_black[2 * maxn], diag2_black[2 * maxn];int col_white[maxn], diag1_white[2 * maxn], diag2_white[2 * maxn];void dfs(int k) { if (n + 1 == k) { ans++; return; } for (int black = 1; black <= n; black++) { for (int white = 1; white <= n; white++) { if (col_black[black] || col_white[white]) continue; if (black == white || !mp[k][black] || !mp[k][white]) continue; if (diag1_black[k + black - 1] || diag2_black[k - black + n]) continue; if (diag1_white[k + white - 1] || diag2_white[k - white + n]) continue; col_black[black] = diag1_black[k + black - 1] = diag2_black[k - black + n] = 1; mp[k][black] = 0; col_white[white] = diag1_white[k + white - 1] = diag2_white[k - white + n] = 1; mp[k][white] = 0; dfs(k + 1); col_black[black] = diag1_black[k + black - 1] = diag2_black[k - black + n] = 0; mp[k][black] = 1; col_white[white] = diag1_white[k + white - 1] = diag2_white[k - white + n] = 0; mp[k][white] = 1; } }}int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) for (int j = 1; j <= n; j++) scanf("%d", &mp[i][j]); dfs(1); printf("%d", ans); return 0;}```
上一篇:ACM-ICPC寒假算法训练1:搜索:一道被输入方式卡住的一道简单题(方法多)
下一篇:ACM-ICPC寒假算法训练1:搜索 HDOJ P1010 : Tempter of the Bone 奇偶剪枝分析

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月08日 02时43分33秒