藍橋杯 BASIC 27 基礎練習 2n皇后問題

2021-07-15 10:17:25 字數 1307 閱讀 4986

問題描述

給定乙個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分析:和n皇后問題一樣,只不過2n皇后要用兩個深度優先搜尋。

呼叫放置白皇后的遞迴dfs,先放置白皇后,當每乙個白皇后放置成功之後,在遞迴的return語句之前,

新建乙個棋盤,複製原來的棋盤後並把放置了白皇后的位置置為0,呼叫擺放黑皇后的深度優先搜尋。

當黑皇后也找到相應的解法後,cnt++; 最後輸出cnt的值。

#include #include #include using namespace std;

int cnt = 0;

bool issafe(vector> pic, vectorpos, int row)

return true;

}void blackdfs(vector> blackpic, vectorblackpos, int n, int blackrow)

for(blackpos[blackrow] = 0; blackpos[blackrow] < n; blackpos[blackrow]++)

}}void dfs(vector> pic, vectorpos, int n, int row)

}for(int i = 0; i < n; i++)

vectorblackpos(n);

blackdfs(blackpic, blackpos, n, 0);

return ;

}for(pos[row] = 0; pos[row] < n; pos[row]++)

}}int main()

}dfs(pic, pos, n, 0);

cout << cnt;

return 0;

}

藍橋杯基礎練習basic 2

問題描述 利用字母可以組成一些美麗的圖形,下面給出了乙個例子 abcdefg babcdef cbabcde dcbabcd edcbabc 這是乙個5行7列的圖形,請找出這個圖形的規律,並輸出乙個n行m列的圖形。輸入格式 輸入一行,包含兩個整數n和m,分別表示你要輸出的圖形的行數的列數。輸出格式 ...

藍橋杯 BASIC 17 基礎練習 矩陣乘法

問題描述 給定乙個n階矩陣a,輸出a的m次冪 m是非負整數 例如 a 1 23 4 a的2次冪 7 10 15 22 輸入格式 第一行是乙個正整數n m 1 n 30,0 m 5 表示矩陣a的階數和要求的冪數 接下來n行,每行n個絕對值不超過10的非負整數,描述矩陣a的值 輸出格式 輸出共n行,每行...

藍橋杯 BASIC 21 基礎練習 Sine之舞

問題描述 最近fj為他的奶牛們開設了數學分析課,fj知道若要學好這門課,必須有乙個好的三角函式基本功。所以他準備和奶牛們做乙個 sine之舞 的遊戲,寓教於樂,提高奶牛們的計算能力。不妨設an sin 1 sin 2 sin 3 sin 4 sin n sn a1 n a2 n 1 a3 2 an ...