C 解決八皇后問題

2022-03-30 07:06:24 字數 996 閱讀 4264

直接上**,可以自己慢慢研究

#include #include 

using

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

//暫停以檢視結果}}

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 是否滿足條件,用...