八皇后問題,Eight Queens Puzzle

2021-07-26 17:44:18 字數 1027 閱讀 1866

ss 八皇后問題tips,規定棋盤式(8*8)(回溯演算法)讀者諸君看完tips先嘗試自己寫乙個,再看答案哈^_^

規則:兩兩不處於同一行、列、斜線

1八個皇后肯定分布在八個橫行之中

2按行遞迴,每行之中按列擴充套件(列是迴圈的依據);

3每新增乙個皇后,將其能吃且尚未擺放皇后的位置設為其行號以作標記(這三個方向分別是左下,正下,右下方),如遇符合條件且已經被打上標記的位置,跳過,不做處理,當程式回溯時,再將該皇后(僅僅是該皇后)改變的標籤在修改為0;

ps 回溯法思想:走不通就掉頭;在問題的解空間之中,按深度優先搜尋方式搜尋,如果根節點包含問題的解,則進入該子樹,否則跳過以該節點為根的子樹

回溯演算法的設計過程:

step1確定問題的解空間

step2確定節點的擴充套件規則

step3搜尋解空間

新增約束:排除錯誤的狀態,不進行沒有必要的擴充套件(分支修剪,是設計過程中對遞迴的優化)在自己設計的八皇后**中,按行進行遞迴,所以相當於分支修剪

對每一次擴充套件的結果進行檢查

#includeusing namespace std;

int board[8][8] = ; //chessboard

int cnt = 0; //answers to this puzzles

inline bool valid(int x, int y)

void set(int row, int col,int setval)*/

for (int i = row + 1, j = col + 1; valid(i, j);)

for (int i = row + 1, j = col - 1; valid(i, j);)

}void print(int last)

printf("\n"); }

}void eqp(int row)

return;

} for (int j =0; j < 8; j++) }}

int main()

八皇后問題

八皇后問題 ackarlix 八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯 1850 年提出 在 8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有 76種方案。1854 年在...

八皇后問題

include iostream.h int a 8 8 棋盤 int r 8 結果 int i,j int count 0 void init i j 0 int judge int x,int y for int mi x 1,mj y mi 1 mi for int ri x 1,rj y 1...

八皇后問題

package quess 由於八個皇后的任意兩個不能處在同一行,那麼這肯定是每乙個皇后佔據一行。於是我們可以定義乙個陣列columnindex 8 陣列中第i個數字表示位於第i行的皇后的列號。先把columnindex的八個數字分別用0 7初始化,接下來我們要做的事情就是對陣列columninde...