八皇后問題 遞迴求解法

2021-09-20 14:58:24 字數 1122 閱讀 2589

#include #include 

#include

/**八皇后問題遞迴方法實現

*/using

namespace

std;

ofstream file;

//用以計數計算結果的數目

int count = 1;/*

*列印的棋盤其中列印1的位置是皇后的位置,0空位。

這裡因為在控制台看不到全部,所有做了在檔案中輸出所有的解

*/int print_chessboard(int chessboard[8

]) file

<

cout

<

}file

cout

file.close();}/*

*引數一將棋盤資訊傳入函式,

引數二將要放入的皇后的行數傳入

引數三將要放入的皇后的列數傳入

若皇后放入成功則返回1,若失敗則返回0

*/int check_chessboard(int chessboard[8],int row,int

column)

//2、檢查在這一列上是否有皇后,正上方

for(int i = 0; i < row;i++)

//3、檢查在左上和右上斜對角上是否有皇后

//左上45度

for(int i=row-1,j=column-1;i>=0&&j>=0;i--,j--)

//右上45度

for(int i=row-1,j=column+1;i>=0&&j<8;i--,j++)

//到這裡說明擺放成功

//擺放成功後把這個位置標記為1

chessboard[row][column]=1

;

//迴圈的檢查下一行的沒乙個位置

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

//若沒有擺放成功就返回0;此時需要把該位置重新置為0

chessboard[row][column]=0

;

return0;

}//主調函式

intmain()

return0;

}

以下是執行結果,答案共有92中擺放方法

八皇后問題 遞迴求解

八皇后問題簡述 在西洋棋中,皇后是最厲害的 這也就是大概為什麼不要得罪女人的原因 她可以吃掉任意與其所在列和行,以及對角線上的棋子。所以在8x8的棋盤上,安放8個皇后,使得不會相互攻擊,也就是安全的就變得極為重要。本文採用遞迴的方式,輸出所有的92種可能的方法。如下 include stdafx.h...

八皇后問題 遞迴求解

在西洋棋的棋盤上,按照西洋棋的規則,擺放8個皇后,使之 和平共處 如圖所示,在3 d上有乙個皇后,則綠色區域中都不能再放置皇后了。最暴力的方法就是使用八個for,但是很明顯,這種方法效率太低。對於放置了皇后的位置,仔細觀察棋盤可以發現每一列 行 只能有乙個皇后,每乙個主 次 對角線上也只能有乙個皇后...

遞迴求解八皇后問題

題目 八皇后問題 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法 遞迴思路 在第1行安全位置放乙個棋子,在第2行安全位置放乙個棋子,以此類推,直到八行都放了棋子,第9行時退出遞迴過程。c 八皇后問題 在8 8格的西洋棋上擺放八個...