codevs1295 N皇后問題 解題報告

2021-07-04 13:11:31 字數 956 閱讀 2604

n皇后問題  codevs1295**gold

【問題描述】

在n*n的棋盤上放置n個皇后(n<=10)而彼此不受攻擊(即在棋盤的任一行,任一列和任一對角線上不能放置2個皇后),程式設計求解所有的擺放方法。

【輸入格式】

輸入:n

【輸出格式】

每行輸出一種方案,每種方案順序輸出皇后所在的列號,各個數之間有空格隔開。若無方案,則輸出no solute!

【輸入樣例】

4【輸出樣例】

2  4  1  3

3  1  4  2

【解題思路】

依然依然是搜尋回溯的經典題。因為皇后可以控制它所在的兩條對角線,我們發現,棋盤上的對角線都滿足這樣的特點:要麼橫縱座標之和相等,要麼橫縱座標之差相等。所以可以用兩個判斷陣列標記兩種對角線有沒有被皇后控制。。搜尋是逐行搜尋,每行只有乙個皇后,所以不用擔心每行的皇后互相衝突,只需要再開乙個判斷陣列標記每一列有沒有被皇后控制即可。

a[i]表示橫縱座標之和為i的對角線是否有被皇后控制。。

b[i+n]表示橫縱座標之差為i的對角線是否有被皇后控制。。。因為c++無法處理負陣列,所以給每乙個i都加上n,就不會出現負數的情況了。。

c[i]表示第i列有沒有被皇后控制。。

【**】

#include#include#includeusing namespace std;

int a[100],b[100],c[100],d[100],n;

bool pd;

void print()

void dfs(int dep)

return;

}int main()

codevs1295 N皇后問題

在n n格的棋盤上放置彼此不受攻擊的n個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於再n n的棋盤上放置n個皇后,任何2個皇后不妨在同一行或同一列或同一斜線上。給定棋盤的大小n n 13 輸出描述 output description 輸出整數表示有多...

CODE VS 1295 N皇后問題

題目描述 description在n n格的棋盤上放置彼此不受攻擊的n個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於再n n的棋盤上放置n個皇后,任何2個皇后不妨在同一行或同一列或同一斜線上。輸入描述 input description給定棋盤的大小n...

CODEVS 1295 N皇后問題 DFS)

時間限制 2 s 空間限制 128000 kb 題目等級 gold 題解 在n n格的棋盤上放置彼此不受攻擊的n個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於再n n的棋盤上放置n個皇后,任何2個皇后不妨在同一行或同一列或同一斜線上。輸入描述 inpu...