八皇后問題之遞迴法求解

2021-09-30 09:05:15 字數 944 閱讀 6902

八皇后問題是十九世紀著名的數學家高斯於2023年提出:在8x8格的西洋棋

上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。 高斯認為有76種方案,2023年在柏林

的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果,對於八皇后問題,正確答案是有92種擺法。

思路大致是這樣的:八個皇后分別分布在八行當中,我們用start(n)表示第n個皇后的位置選擇,程式由start(1)開始,顯然,第乙個皇后可以選擇第一行的任意乙個位置,當其位置選定後,呼叫函式fanc(),對接下來的皇后位置選擇作出限制,然後呼叫start(2),第二個皇后選擇乙個位置,呼叫函式fanc(),對接下來的皇后位置選擇作出限制,然後呼叫start(3)••••••當第八個皇后選定位置,並呼叫start(9)時,說明已經得到乙個結果,將其顯示。

如果第n個皇后沒有可行選擇,那就返回上一步,令第n-1個皇后重新選擇位置。這就是回溯法的思想,盡量往下走,走不通再回來,選擇其它走法。

下面給出完整的c++源**,**已在vs2008下編譯通過。

#include using namespace std;

struct queen //皇后

;struct chessboard //棋盤

;

queen myqueen[8]; //共有八個皇后

chessboard mychessboard[8]; //準備八張棋盤

int n; //表示第n種放法

void print() //將所得結果顯示出來 }

void start(int step) }}

int main()

道合|sameideal.com

遞迴法求解八皇后

八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯1850年提出 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線 對角線 上,問有多少種擺法。主要思路 一行一行得擺放皇后,直到第7行 作為遞迴結束條件 初始...

八皇后問題,遞迴法

include includeint count 0 成功的次數 判斷在對角線或者同行同列上是否有皇后 int notdanger int row,int j,int chess 8 同列 for int i 0 i 8 i 判斷左上方 for int i row,k j i 0 k 0 i k 判...

八皇后問題求解 之遞迴

什麼是八皇后問題?該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊。所以,我們要了解皇后的攻擊模式 皇后可以橫著走任意步數 豎著走任意步數 斜著走任意步數。翻譯過來就是 即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。實際上...