八皇后問題

2021-06-20 15:51:31 字數 904 閱讀 3507

八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯2023年提出:在8´8格的西洋棋棋盤上,安放八個皇后,要求沒有乙個皇后能夠「吃掉」任何其他乙個皇后,即任意兩個皇后都不能處於同一行、同一列或同一條對角線上,求解有多少種擺法。

高斯認為有76種方案。2023年在柏林的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法得出結論,有92種擺法。

八皇后在棋盤上分布的各種可能的格局數目非常大,約等於232種,但是,可以將一些明顯不滿足問題要求的格局排除掉。由於任意兩個皇后不能同行,即每一行只能放置乙個皇后,因此將第i個皇后放置在第i行上。這樣在放置第i個皇后時,只要考慮它與前i-1個皇后處於不同列和不同對角線位置上即可。

解決該問題採用回溯法。首先將第乙個皇后放於第一行第一列,然後依次在下一行上放置下乙個皇后,直到八個皇后全放置安全。在放置每乙個皇后時,都依次對每一列進行檢測,首先檢測待第一列是否與已放置的皇后衝突,如不衝突,則將皇后放置在該列,否則,選擇該行的下一列進行檢沒。如整行的八列都衝突,則回到上一行,重新選擇位置,依次類推。

#include #include #include #include using namespace std;

int line[8],answer=0;

void show()

cout<} answer++;

cout

}int judge(int t)

if(line[i]+i==line[t]+t)

if(line[i]-i==line[t]-t)

}return n;

}void control(int n)

else

show();

} }int main()

八皇后問題

八皇后問題 ackarlix 八皇后問題是乙個古老而著名的問題,是回溯演算法的典型例題。該問題是十九世紀著名的數學家高斯 1850 年提出 在 8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有 76種方案。1854 年在...

八皇后問題

include iostream.h int a 8 8 棋盤 int r 8 結果 int i,j int count 0 void init i j 0 int judge int x,int y for int mi x 1,mj y mi 1 mi for int ri x 1,rj y 1...

八皇后問題

package quess 由於八個皇后的任意兩個不能處在同一行,那麼這肯定是每乙個皇后佔據一行。於是我們可以定義乙個陣列columnindex 8 陣列中第i個數字表示位於第i行的皇后的列號。先把columnindex的八個數字分別用0 7初始化,接下來我們要做的事情就是對陣列columninde...