藍橋杯之 2n皇后問題(雙層dfs,暴力)

2021-09-11 20:37:18 字數 1322 閱讀 9176

給定乙個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后

和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩

個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少種放法?n小於等於8。

輸入的第一行為乙個整數n,表示棋盤的大小。

接下來n行,每行n個0或1的整數,如果乙個整數為1,表示對應的位置可以放皇后,

如果乙個整數為0,表示對應的位置不可以放皇后。

輸出乙個整數,表示總共有多少種放法。

no.1

41 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:

#includeusing

namespace

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。輸入格式 輸入的第一行為乙...