八皇后問題 紫書(劉汝佳)

2021-09-18 05:03:00 字數 593 閱讀 9259

解題思路:任意兩個皇后不能出現在同行同列及同對角線,可以直接考慮每一行放乙個皇后,依次往下進行。11

第1行的皇后放在0,1列都會和第0行的皇后攻擊,所以直接到了第2列, 當第0和1行這麼放置皇后時,我們發現下一行無論放在哪一列皇后都會相互攻擊,所以此路不通,第1行的i要移動到下乙個列。11

現在我們開始放第2行,放在其他3列都會與前面的皇后攻擊,因此只能放在第1列,可是這樣就會發現第3行無論放在**都不行,這時候我們要講第0行的皇后移動到後一列,這個過程就叫做回溯。11

11這種情況是我們遇到的第一種可以放下的情況,此時cur==k,所以**中的tot++;

後面的情況我就不列了,也可以依此進行類推。 

**如下:

#includeusing namespace std;

int a[10];

int n;

int tot;

int k;

void dfs(int cur)

else

for(int i=0;i>n;

for(k=1;k<11;k++)

cout

}

劉汝佳 開燈問題

問題描述 有n盞燈,編號為1 n,第1個人把所有燈開啟,第2個人按下所有編號為2 的倍數的開關 這些燈將被關掉 第3 個人按下所有編號為3的倍數的開關 其中關掉的燈將被開啟,開著的燈將被關閉 依此類推。一共有k個人,問最後有哪些燈開著?輸入 n和k,輸出開著的燈編號。k n 1000 輸入 輸入一組...

硬幣問題(劉汝佳266,)

題目描述 硬幣找零問題描述 現存在一堆面值為 v1 v2 v3 個單位的硬幣 問最多和最少需要多少個硬幣才能找出總值為t個單位的零錢?輸入 第一行為n,t,表示硬幣個數,需要湊的面額,第二行有n個數,表示硬幣的面額 輸出 一行,分別為最大最小的數目,用空格分開 示例 輸入 5 63 1 2 5 21...

八皇后問題 詳解 參考《紫書》

在乙個8 8的棋盤上 放置八個皇后 使得他們互相不攻擊 皇后攻擊範圍為 同行同列同對角線 從64個格仔中 選乙個子集 使得 子集 中恰好有八個元素 且任意選出的兩個格仔都不是同一行,同一列同,一對角線 這是子集列舉問題 然而 64個格仔的自己有2 64個 所需處理資料過大 從64個格仔中 選八個格仔...