八皇后問題

2021-06-26 11:53:43 字數 476 閱讀 1279

比較火的一道智力題,題目就不說了,一搜一堆,這裡自己記錄一下,主要就是用遞迴來實現。

基本思想是:假設某一行為當前狀態,不斷檢查該行所有的位置是否能放乙個皇后,檢索的狀態有兩種:

(1)先從首位開始檢查,如果不能放置,接著檢查該行第二個位置,依次檢查下去,直到在該行找到乙個可以放置乙個皇后的地方,然後儲存當前狀態,轉到下一行重複上述方法的檢索。

(2)如果檢查了該行所有的位置均不能放置乙個皇后,說明上一行皇后放置的位置無法讓所有的皇后找到自己合適的位置,因此就要回溯到上一行,重新檢查該皇后位置後面的位置。

#include #include #include#define max 8

int queen[max], sum=0; /* max為棋盤最大座標 */

void show() /* 輸出所有皇后的座標 */

{ int i;

for(i = 0; i < max; i++)

cout<

八皇后問題

八皇后問題 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...