直接上**,可以自己慢慢研究
#include #includeusing
namespace
std;
int linenum[9]; //
第i列的皇后要放的行位置(只用其中的列號1到8)
bool a[9]; //
a[i]為1表示第i行上尚未放皇后
bool b[15]; //
b[i]為1表示第i條斜對角線上尚未放皇后(斜對角線指的是"/"狀對角線,該對角線上各點的行列號之和i+j為乙個常數)
bool c[15]; //
c[i]為1表示第i條反斜對角線上尚未放皇后(反斜對角線指的是"\"狀對角線,該對角線上各點的行列號之差i-j為乙個常數)。
int num=0; //
計數器,用於計算方法總數
class
bahuanghou
void solve(int
);};
void bahuanghou::solve(inti)}
if(i>8) //
擺放皇后之後,若i=8即已放滿時則遞迴出口;否則通過solve(i+1);進行遞迴呼叫。
cout
<}
for(int m=1; m<9; m++)}}
cout
/system("pause");
//暫停以檢視結果}}
intmain()
for(i=0;i<15;i++)
huanghou.solve(
1); //
第1列開始的連續8列上均放上皇后
cout<<"
一共有"
<"
種方法。
"
}
c解決八皇后問題
問題描述 這是乙個經典的關於組合學的問題 在乙個西洋棋中的的棋盤上放置8個皇后,為了使其中的任何2個皇后都不能相互 攻擊 希望尋求8個皇后的安全放置位置。該問題的不能相互 攻擊 相當於要求任意兩個皇后不能在同一行 同一列或同一斜線上。求解可能的方案及方案數。思路 一般採用回溯法。易知,每行肯定有乙個...
C陣列解決八皇后問題
引用這首詩為了引出乙個演算法,叫做回溯法.什麼是回溯,通俗的解釋就是當你發現自己當初的選擇是錯誤的時候,用時光機把你送回到做選擇的那一天,讓你重來一次.想一想如果高考時給你這樣的福利,豈不是美滋滋?一下關於八皇后的解法,就是利用了回溯法.首先做乙個最簡單的說明,因為八個皇后互相之間都攻擊不到,即不能...
C語言解決八皇后問題
八皇后問題是這樣乙個問題 將八個皇后擺在一張8 8的西洋棋棋盤上,使每個皇后都無法吃掉別的皇后,即 每一行,每一列,每一條對角線只有乙個皇后,一共有多少種擺法?演算法思想 首先逐行遍歷,設定queen max 陣列記錄縱座標 max為格仔數8 每次落子前判斷座標 i,queen i 是否滿足條件,用...