給定乙個 n×n 的棋盤,請你在上面放置 n 個棋子,要求滿足:
1 2 3 4 5 6
-------------------------
1 | | o | | | | |
-------------------------
2 | | | | o | | |
-------------------------
3 | | | | | | o |
-------------------------
4 | o | | | | | |
-------------------------
5 | | | o | | | |
-------------------------
6 | | | | | o | |
-------------------------
上圖給出了當 n=6 時的一種解決方案,該方案可用序列2 4 6 1 3 5
來描述,該序列按順序給出了從第一行到第六行,每一行擺放的棋子所在的列的位置。
請你編寫乙個程式,給定乙個 n×n 的棋盤以及 n 個棋子,請你找出所有滿足上述條件的棋子放置方案。
輸入格式
共一行,乙個整數 n。
輸出格式
共四行,前三行每行輸出乙個整數序列,用來描述一種可行放置方案,序列中的第 i 個數表示第 ii 行的棋子應該擺放的列的位置。
這三行描述的方案應該是整數序列字典序排在第
一、第二、第三的方案。
第四行輸出乙個整數,表示可行放置方案的總數。
資料範圍
6≤n≤13
輸入樣例:
6
輸出樣例:2 4 6 1 3 5
3 6 2 5 1 4
4 1 5 2 6 3
4
#include
#include
#include
using namespace std;
const
int n =15;
int n;
bool col[n]
, dg[n *2]
, udg[n *2]
;int path[n]
, ans;
void
dfs(
int x)
return;}
for(
int y =
1; y <= n ; y ++)}
}int
main()
思路:
1.首先,它是用dfs一層一層搜尋的,所以行數一定不相同
2.col
陣列用來判斷是不是同一列的,之前選過的列號標記為true
3.處理對角線,根據座標系的知識可以知道,行數(也就是深度x)和列數(y)的關係是,x + y為定值,x - y也為定值(但是這裡要注意,x-y可能是負值就陣列越界了,所以**中是用了+n的方法保證其為正值,只要同個對角線上的值相等就ok的!!)
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個...
寒假每日一題題解 1 24 階乘
n 的階乘 記作 n 是指從 1 到 n 包括 1 和 n 的所有整數的乘積。階乘運算的結果往往都非常的大。現在,給定數字 n,請你求出 n 的最右邊的非零數字是多少。例如 5 1 2 3 4 5 1205 1 2 3 4 5 120,所以 5 的最右邊的非零數字是 2。輸入格式 共一行,包含乙個整...