八皇后問題 遞迴回溯法

2021-10-02 14:02:22 字數 1036 閱讀 5985

寫在前面:最開始接觸是資料結構老師在提到過,後來在學python時老師也有提到過,出於好奇就去思考了這個問題,當然,小白的我還是在b站懶貓老師的幫助下學會啦,真棒哈哈哈哈哈哈

這裡主要問題是在於判斷對角線上是否能放,表示上對角線d1,表示下對角線d2,根據老師所說加上自己的理解,同乙個下對角線上 n-col+7相同(n表示行,col表示列)

同理,上對角線上n+col 相同

由以上可得判斷的標準為(flag[col]&&d1[n-col+7]&&d2[n+col]==ture),只要符合這個就能判斷是否能放入棋子

place[n]=col;//擺放皇后

flag[col]=false;//宣布占領第col列

d1[n-col+7]=false;//占領上對角線

d2[n+col]=false;//占領下對角線

#include#include int place[8]=; //第n個皇后所佔位置的列號

bool flag[8]=; //標誌陣列,表示第col列是否可佔,1表示不衝突

bool d1[15]=;

bool d2[15]=; //表示下對角線是否可佔

int number = 0; //用於統計解的數量(八皇后總共有92個解)

void print();

void gernerate(int n);

int main()

void gernerate(int n)

} }void print();

for(col=0;col<8;col++)

table[col][place[col]]=1;

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

printf("\n");

} }

八皇后問題 遞迴 回溯法

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

八皇后問題 遞迴 回溯法

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

八皇后問題(遞迴,回溯)

八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n n,而皇后個數也變成n。當且僅當 n 1 或...