經典演算法之八皇后問題

2021-08-01 01:13:45 字數 793 閱讀 7726

問題描述:

八皇后問題是乙個以西洋棋為背景的問題:如何能夠在 8×8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。

下面利用回溯法(遞迴寫法),來求出所有可能的結果:

#include 

#include

#include

#include

using

namespace

std;

#define max 8

class queenpuzzle

bool isvalid(int m);//判斷第m行的皇后是否合法

void printout();//列印解法

void placeqeen(int m);//放置第m個皇后(m剛好就是行號)

};bool queenpuzzle::isvalid(int m)

return

true;

}void queenpuzzle::printout()

cout

<"按q鍵退出,按其他鍵繼續"

exit(0);

}void queenpuzzle::placeqeen(int m)

for(int i=0;i//放置皇后

if(isvalid(m))

placeqeen(m+1);//繼續放置下乙個皇后

}}int main()

重點是要理解這個回溯法的思想

經典問題之八皇后問題

八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后,為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。我們先來考慮,某個位置是否能夠放皇后,如下圖 兩個皇后的位置是 1,1 2,3 那麼接下來的第三個皇后該怎麼放...

C C 回溯經典演算法之 八皇后問題

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有76種方案。1854年在柏林的象棋雜誌上不同的作者發表了...

經典題型之回溯演算法 八皇后問題

include 判斷能不能在cnt行第col列擺放乙個皇后 能返回1 不能返回0 int judge int queens size t n,size t row,size t col return1 當前位置無威脅,返回1 輸出當前擺法的8個皇后的位置 void show int queens s...