八皇后問題是乙個以西洋棋為背景的問題:
如何能夠在 8×8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后。為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。
基本思路:將棋盤分為8行,每一行填充乙個棋子,這樣就能保證每一行不衝突,具體到每一行的話,又分為8種可能,顯然用遞迴的方式很容易就實現。
資料結構:乙個8乘8的陣列(0表示無棋子,1表示有棋子),具體實現的時候有兩個要注意的地方:1.判斷合法性:每一列需要判斷,還有就是對角線上也需要判斷2.在每一行選擇將陣列的某乙個位置置為1
後,要在下一次選擇前將該位置重新置為0,(函式的壓棧和彈棧是自動完成的,但是像這種情況需要手動完成)。
具體**:
#include #includeusing
namespace
std;
int data[8][8]=;
int countl=0;//
分治法:分成8行,每一行又分為8小格
void
print()
cout
<}int is_legal(int i,int j)
return1;
}void deal(int
i)
else
}}int
main()
八皇后問題(簡單回溯)
隨心而記,以供追憶 1,問題描述 八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯1850年提出 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。2,解決方式 由於本問題只有八皇后擺放,...
簡單的八皇后問題(C )
問題描述 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后。為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上,如下圖 假如一棋盤已經正確放置了七個皇后,編寫程式求解最後乙個皇后的放置位置。輸入形式 按照棋盤行由...
八皇后問題詳細思路分析
static int count 0 共多少解法 public static void main string args 編寫乙個方法,放置第n個皇后 特別主意 check 是每一次遞迴時,進入到check中都有for int i 0 i private void check int n 如果沒有到...