解題筆記(22) n後問題

2021-05-27 01:46:15 字數 664 閱讀 5615

問題描述:在n×n格的棋盤上放置彼此不受攻擊的n個皇后。即任意兩個皇后不得處在同一行、同一列或者同一對角斜線上。下圖中的每個黑色格仔表示乙個皇后,這就是一種符合條件的擺放方法。請求出總共有多少種擺法。

思路:每個皇后都是放在單獨的一行,因此同行就不用判斷了。用乙個陣列記錄每個皇后可能的列位置,比如col[0]表示皇后0所在的列號,0到 n-1 之間的值。對於每一種排列,檢查是否有在同一列或者同一對角線的兩個皇后。產生全排列的演算法可以參考字串的排列。

這種方法很簡單,但是效率太低了。可以改進一下,採用回溯的思想。首先考慮皇后0所在的列號,取0到7的乙個。然後考慮皇后1,檢查每乙個可能的列號,如果與皇后0沒有衝突,那麼考慮皇后2;如果與皇后0有衝突,那麼直接返回,繼續考慮已經沒有意義。

參考**:nqueenproblem(8)計算8後問題

//函式功能 : 檢查皇后cur的擺法

//函式引數 : n為皇后數,cur為當前檢查的皇后,col為皇后的列位置,sum為找到的擺法

//返回值 : 無

void queen(int n, int cur, int *col, int *sum)

{ if(cur == n) //找到一種擺法

{ for(int i = 0; i < n; i++)

cout<

Python程式設計基礎題(22 N個數求和)

description 本題的要求很簡單,就是求n個數字的和。麻煩的是,這些數字是以有理數分子 分母的形式給出的,你輸出的和也必須是有理數的形式。input 輸入第一行給出乙個正整數n 100 隨後一行按格式a1 b1 a2 b2 給出n個有理數。題目保證所有分子和分母都在長整型範圍內。另外,負數的...

N後互不攻殺問題

題目 在n n的西洋棋盤上放置n個皇后,使它們彼 此互相不攻殺。皇后攻殺條件 處於同一行,或同一 列,或同一斜線的皇后彼此攻殺。試給出全部方案。我發現我和老師的思想老師不在乙個方向。上次的和質問題,我把 都寫在main 函式裡面,接過來時寫了很多函式。這次的n後問題,我寫了很多函式,老師卻都寫在ma...

回溯之n後問題

n後問題 在 n n格的棋盤上放置彼此不受攻擊的 n個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於在 n n格的棋盤上放置 n個皇后,任何 2個皇后不放在同一行或同一列或同一斜線上。解向量 x1,x2,xn 顯約束 xi 1,2,n 隱約束 1 不同列...