C語言基於回溯演算法解決八皇后問題的方法

2022-10-04 00:12:21 字數 979 閱讀 6670

問題描述:

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例:在8x8格的西洋棋棋盤上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。

問題求解:

採用回溯演算法,即從第一行開始,依次探查可以放置皇后的位置,若找到,則放置皇后,開始探查下一行;若該行沒有位置可以放置皇后,則回溯至上程式設計客棧一行,清除該行放置皇后的資訊,從該行原本放置皇后的下乙個位置開始探查可以放置皇后的位置。求所有解時,每找到一組解,就清除這一組解最後乙個皇后的位置資訊,開始探查該行另外乙個可以放置皇后的位置,依次回溯求解。

儲存結構:

一維陣列:col[8]:存放第i列有無皇后的標記資訊

一維陣列:left[15]:存放每一條左斜線上的有無皇后的標記資訊

一維陣列:right[15]:存放每一條右直線上有無皇后的標記資訊

一維陣列:q[8]:存放第i行的皇后的列下標

**實現:

#include

#define n 8

int col[n] = ;

int right[2 * n - 1] = ;

int left[2 * n - 1] = ;

int q[n];

int cnt = 0;

void print()

printf("\n");

} printf("*************************=\n");

cnt++;

}void queen(int i)

else

col[j] = 0;

right[n - 1 + i - j] = 0;

left[i + j] = 0;程式設計客棧//清除標記,查詢下一組解}}}

int main(void)

執行結果:

一共92組解,前面結果略去。。

本文標題: c語言基於回溯演算法解決八皇后問題的方法

本文位址:

C語言回溯法解八皇后問題 八皇后演算法

在乙個西洋棋棋盤上放置八個皇后,使得任何兩個皇后之間不相互攻擊,求出所有的布棋方法,並推廣到n皇后情況。啥文字都不用看,b站上有個非常詳細的動畫 解說,上鏈結!click here include include include using namespace std void put queen ...

C 基於回溯法解決八皇后問題示例

回溯法的基本做法是搜尋,或是一種組織得井井有條的,能避免不必要搜尋的窮舉式搜尋法。這種方法適用於解一些組合數相當大的問題。回溯法在問題的解空間樹中,按深度優先策略,從根結點出發搜尋解空間樹。演算法搜尋至解空間樹的任意一點時,先判斷該結點是否包含問題的解。如果肯定不包含,則跳過對該結點為根的子樹的搜尋...

回溯演算法 八皇后

總時間限制 1000ms 記憶體限制 65536kb 描述 會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b 1b2....