給定乙個 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分析:此題是乙個n3 6 2 5 1 4
4 1 5 2 6 3
4
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門課的成績 語文 數學 英語。先按總分從高到低排序,如果兩個同學總分相同,再按語文成績從高到低排序,如果兩個同學總分和語文成績都相同,那麼規定學號小的同學排在前面,這樣,每個學生的排序是唯一確定的。任...