八皇后 採用排列的方法做的

2021-06-22 09:36:29 字數 660 閱讀 4313

題意:求八皇后的擺法

顯然8個皇后肯定是不能在同一行的,因此只需要考慮8個皇后列的擺法,使用陣列columnindex[8],陣列中第i個數字表示位於第i行的皇后的列號。首先對columnindex使用0~7進行初始化,然後對columnindex進行全排列,關於排列請看我前面寫的《字串的全排列》,之後對得到的各個排列進行判斷,看是否滿足條件。由於8個皇后已經是在不同的行和列上了,現在只需判斷是否存在兩個以上的皇后在同一條對角線上,因此判斷條件為:i - j == columnindex[i] - columnindex[j] 或  j - i == columnindex[i] - columnindex[j],如上有乙個成立則不滿足條件

int queuenum = 0;

vectorqueue;

void printqueue()

bool check()

}

return true;

}void permutation(vector::iterator first, vector::iterator last)

return;

}

for(vector::iterator iiter = first; iiter != last; iiter++)

}

遞迴 基於排列的八皇后問題解法

以下 劉海濤個人部落格 題目 在8 8的西洋棋上擺放八個皇后,使其不能相互攻擊,即任意兩個皇后不得處在同一行 同一列或者同一對角斜線上 並不僅只是最長的兩條對角線 下圖中的每個黑色格仔表示乙個皇后,這就是一種符合條件的擺放方法。請求出總共有多少種擺法。這就是有名的八皇后問題。解決這個問題通常需要用遞...

八(n)皇后問題的方法總結

第一種方法是我做洛谷p1219的時候學習的方法 將選的數的八個方向全部做標記,然後如果有標記的話就不訪問,深度優化搜尋以後再刪除標記 include using namespace std int n,a 50 b 50 c 50 d 50 int cnt 0 intprint cout n cnt...

C 實現八皇后問題的方法

一般在八皇后問題中,我們要求解的是乙個8 8的西洋棋棋盤中,放下8個皇后且互相不能攻擊的排列總數。皇后的攻擊範圍為整行,整列,以及其斜對角線。由於皇后的攻擊範圍特性,注定我們每行只能放下乙個皇后,於是我們要做的只是逐行放下皇后。八皇后問題是回溯法的典型問題。這裡我們用的方法很簡單 從第一行開始逐個檢...