「2n皇后」問題本質上還是 用 dfs 寫「8皇后」問題。
先確定黑皇后的排列,再確定白皇后的排列。
此**特色:
1)用一維陣列posb[maxn]、posw[maxn]即可表示黑白皇后的擺放。
eg. posb[2]=1 表示黑皇后在第二行第一列放一枚。
2)if( posw[i] == posw[cur] || abs(i-cur) == abs(posw[i]-posw[cur]))
這個是本程式的關鍵**。可判斷是否有同列(不可能同行),左右斜對角線的皇后。
完整**:
#include
#include
using
namespace std;
const
int maxn =10;
int n;
int map_q[maxn]
[maxn]
;int posb[maxn]=;
int posw[maxn]=;
int ans;
bool
checkw
(int cur)
//檢查函式
return
true;}
bool
checkb
(int cur)
//檢查函式
return
true;}
void
dfs_white
(int cur)
for(
int i =
1; i <= n; i++)}
void
dfs_black
(int cur)
for(
int i =
1; i <= n; i++
)//表示 放第 cur行的 第 i列
}int
main()
藍橋杯 2n皇后問題
問題描述 給定乙個n n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放法?n小於等於8。輸入格式 輸入的第一行為乙個整數n,表示棋盤的大小。接...
藍橋杯 2n皇后問題
基礎練習 2n皇后問題 出處問題描述 給定乙個n n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后 和n個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩 個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放法?n小於等於8。輸入格式 輸入的第一行...
藍橋杯 2n皇后問題
基礎練習 2n皇后問題 問題描述 給定乙個n n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后 和n個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩 個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放法?n小於等於8。輸入格式 輸入的第一行為乙...