資源限制
時間限制:1.0s 記憶體限制:512.0mb
問題描述
給定乙個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少種放法?n小於等於8。
輸入格式
輸入的第一行為乙個整數n,表示棋盤的大小。
接下來n行,每行n個0或1的整數,如果乙個整數為1,表示對應的位置可以放皇后,如果乙個整數為0,表示對應的位置不可以放皇后。
輸出格式
輸出乙個整數,表示總共有多少種放法。
樣例輸入
41 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
樣例輸出
2樣例輸入
41 0 1 1
1 1 1 1
1 1 1 1
1 1 1 1
樣例輸出0**
1 #include2 #include3 #include4using
namespace
std;56
//思路: 先對黑皇后進行安放,並記錄下所有可能的方法(用二維陣列存) 7//
對於每種已經能放好的黑皇后方法,將黑皇后的位置設為0表示能不能放,8//
再去看白皇后有多少種安方法,最後加起來即可 9//
並且搜黑皇后和搜白皇后其實可以用同乙個函式(稍微有些區別,也可以分開更清晰)
10int n=0;11
int time=0;12
int map[10][10]=;
13int temp[10][10]=; //
臨時地圖
14int t=0; //
用於記錄存放了多少種安置和黑皇的方法
15int cun[1000][9]=; //
cun[i][j]中,i代表第i種黑皇后放置方法(i從0開始),j代表第j行,cun[1000][8]代表第i種方法中第j行第cun[1000][8]列(存放黑皇)
16int queenpos[10]=;
17int pos[10]=;
18void queen(int
k);19
void bqueen(int
k);20
intmain()26}
2728
//先對黑皇位置搜尋
29 queen(1); //
第1行開始
30if(t==0)34
35int sum=0;36
for(int i=0;i)
42 bqueen(1); //
白皇后開始搜尋
43 sum+=time;44}
45 cout<46return0;
47}
48void queen(int
k)53 t++;
54return;55
}5657for(int i=1;i<=n;i++)63}
64if(k==j&&map[k][i]==1
) 68
} 69}70
71void bqueen(int
k)76
77for(int i=1;i<=n;i++)83}
84if(k==j&&temp[k][i]==1
) 88
} 89 }
搜尋 遞迴 2n皇后問題(藍橋杯練習題)
資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 給定乙個n n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放法?n小於等於...
藍橋杯基礎練習 2n皇后問題
問題描述 給定乙個n n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放法?n小於等於8。輸入格式 輸入的第一行為乙個整數n,表示棋盤的大小。接...
藍橋杯 基礎練習 2n皇后問題
問題描述 給定乙個n n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行 同一列或同一條對角線上,任意的兩個白皇后都不在同一行 同一列或同一條對角線上。問總共有多少種放法?n小於等於8。輸入格式 輸入的第一行為乙個整數n,表示棋盤的大小。接...