AcWing寒假每日一題 Day14棋盤挑戰

2021-10-17 04:59:09 字數 1532 閱讀 1422

給定乙個 n×n

n×nn×

n 的棋盤,請你在上面放置 n

nn 個棋子,要求滿足:

每行每列都恰好有乙個棋子

每條對角線上都最多只能有乙個棋子

上圖給出了當 n=6

n=6n=

6 時的一種解決方案,該方案可用序列 2224

446661

113335

55 來描述,該序列按順序給出了從第一行到第六行,每一行擺放的棋子所在的列的位置。

請你編寫乙個程式,給定乙個 n×n

n×nn×

n 的棋盤以及 $n $個棋子,請你找出所有滿足上述條件的棋子放置方案。

輸入格式

共一行,乙個整數 nnn。

輸出格式

共四行,前三行每行輸出乙個整數序列,用來描述一種可行放置方案,序列中的第 i

ii 個數表示第 i

ii 行的棋子應該擺放的列的位置。

這三行描述的方案應該是整數序列字典序排在第

一、第二、第三的方案。

第四行輸出乙個整數,表示可行放置方案的總數。

資料範圍

6 ≤n

≤136≤n≤13

6≤n≤13

輸入樣例:

輸出樣例:

2 4 6 1 3 5

3 6 2 5 1 4

4 1 5 2 6 3

4

分析:此題是乙個n

nn皇后問題,只是加了皇后位置輸出而已,所以可用dfs

dfsdf

s搜尋。

對於n ×n

n×nn×

n 的棋盤,要放置n

nn個皇后,所以每一行必然要有乙個皇后,所以可以搜每一行防止皇后的位置。

開三個陣列,分別標記行和兩個對角線,n×n

n×nn×

n 棋盤中對角線的數量是2n−

12n-1

2n−1

,所以兩個對角線陣列要開2∗n

2*n2∗

n,不然會wawa

wa。

#include

.h>

using namespace std;

const int n=30;

int dg[n]

,udg[n]

,col[n]

,n,res,path[n]

;void dfs

(int x)

res++

;return;}

for(int i=

0;i}int main()

acwing寒假每日一題題解

貨倉選址 頭兩天的每日一題有點水 include using namespace std int s 505 505 int i,j intmain void 語法題蛇形添數 輸入兩個整數n和m,輸出乙個n行m列的矩陣,將數字 1 到 n m 按照回字蛇形填充至矩陣中。具體矩陣形式可參考樣例。輸入格...

acwing 寒假每日一題題解

本篇部落格是基於acwing活動中的寒假每日一題 活動位址 在一條數軸上有 n 家商店,它們的座標分別為 a1 an。現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。輸入格式 第一行輸入整數n。第二行n個...

AcWing寒假每日一題 Day9獎學金

某小學最近得到了一筆贊助,打算拿出其中一部分為學習成績優秀的前5名學生發獎學金。期末,每個學生都有3門課的成績 語文 數學 英語。先按總分從高到低排序,如果兩個同學總分相同,再按語文成績從高到低排序,如果兩個同學總分和語文成績都相同,那麼規定學號小的同學排在前面,這樣,每個學生的排序是唯一確定的。任...