寒假每日一題題解 1 22 棋盤挑戰 八皇后

2021-10-17 15:06:14 字數 1678 閱讀 7049

給定乙個 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。輸入格式 共一行,包含乙個整...