在乙個8×8西洋棋盤上,有8個皇后,每個皇后佔一格;要求皇后間不會出現相互「攻擊」的現象,即不能有兩個皇后處在同一行、同一列或同一對角線上。問共有多少種不同的方法。
*問題分析與演算法設計
這是乙個古老的具有代表性的問題,用計算機求解時的演算法也很多,這裡僅介紹一種。
採用一維陣列來進行處理。陣列的下標i表示棋盤上的第i列,a[i]的值表示皇后在第i列所放的位置。如:a[1]=5,表示在棋盤的第一例的第五行放乙個皇后。
程式中首先假定a[1]=1,表示第乙個皇后放在棋盤的第一列的第一行的位置上,然後試探第二列中皇后可能的位置,找到合適的位置後,再處理後續的各列,這樣通過各列的反覆試探,可以最終找出皇后的全部擺放方法。
程式採用回溯法,演算法的細節參看程式。
*程式說明與注釋
#include
#define num 8 /*定義陣列的大小*/
int a[num+1];
int main()
else if(a[i]==num) a[i]=1;
else a[i]++; /*將a[i]的值取下乙個值*/
}else if(++i<=num)
if(a[i-1]==num) a[i]=1; /*若前乙個元素的值為num則a[i]=1*/
else a[i]=a[i-1]+1; /*否則元素的值為前乙個元素的下乙個值*/
}if(not_finish)
{++count;
printf((count-1)%3?" [%2d]: ":" \n[%2d]: ",count);
for(k=1;k<=num;k++) /*輸出結果*/
printf(" %d",a[k]);
if(a[num-1]*思考題
乙個8×8的西洋棋盤,共有64個格仔。最多將五個皇后放入棋盤中,就可以控制整個的盤面,不論對方的棋子放哪一格中都會被吃掉。請程式設計找出這樣的五個「皇后」可能的布局。
八皇后問題
八皇后問題 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...