給定乙個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后
和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩
個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少種放法?n小於等於8。
輸入的第一行為乙個整數n,表示棋盤的大小。
接下來n行,每行n個0或1的整數,如果乙個整數為1,表示對應的位置可以放皇后,
如果乙個整數為0,表示對應的位置不可以放皇后。
輸出乙個整數,表示總共有多少種放法。
no.141 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
no.2
41 0 1 1
1 1 1 1
1 1 1 1
1 1 1 1
no.1藍橋杯2no.2
0
分析:有黑皇后和白皇后,規則跟n皇后問題是一樣的,先放一種皇后,比如先放白皇后,會產生x中放置的方案,然後再在這x個方案中放置黑皇后,乙個位置只能放乙個棋子,不同種類的皇后可以放置在同行,同列,或者同斜列上
直接雙層dfs暴力即可
code:
#includeusingnamespace
std;
#define max_v 10
#define me(a,x) memset(a,x,sizeof(a))
inta[max_v][max_v];
intm[max_v],l[max_v],r[max_v];
intc;
intn;
struct
node
p[max_v*max_v];
void f(int
k) }
}void dfs1(int
i)else
m[j]=l[i+j]=r[i-j+n]=0
; a[i][j]=1
; }
}}void dfs2(int i,int
k)else
m[j]=l[i+j]=r[i-j+n]=0
; p[k].b[i][j]=1
; }
}}int
main()
cout
return0;
}
posted @
2019-03-03 20:40
y先森0.0 閱讀(
...)
編輯收藏
藍橋杯 2n皇后問題
問題描述 給定乙個n n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放法?n小於等於8。輸入格式 輸入的第一行為乙個整數n,表示棋盤的大小。接...
藍橋杯 2n皇后問題
基礎練習 2n皇后問題 出處問題描述 給定乙個n n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后 和n個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩 個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放法?n小於等於8。輸入格式 輸入的第一行...
藍橋杯 2n皇后問題
基礎練習 2n皇后問題 問題描述 給定乙個n n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后 和n個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩 個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放法?n小於等於8。輸入格式 輸入的第一行為乙...