八皇后問題 C語言

2021-07-09 13:47:43 字數 1030 閱讀 6745

八皇后問題是乙個以西洋棋為背景的問題:如何能夠在 8×8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。八皇后共有92種解法。八皇后問題可以推廣為更一般的n皇后擺放問題:這時棋盤的大小變為n×n,而皇后個數也變成n。當且僅當 n = 1 或 n ≥ 4 時問題有解。

用回溯演算法解,**如下:

#include 

#include

#define length 8

int count = 0; // 計數

int ms[length][length] = ;

// 判斷將皇后放在(a, b)位置上是否合法

int istrue(int a, int b)

// 向左判斷左

for(t=b-1; t>=0; t--)

int m, n;

// 向左上判斷

for(m=a-1,n=b-1; m>=0&&n>=0; m--,n--)

// 向右上判

for(m=a-1,n=b+1; m>=0&&nif(ms[m][n] == 1)

return

0; }

return1;}

// 列印八皇后

void print()

else

if(ms[a][b] == 1)

}printf("\n");

}printf("\n\n");

}// 遞迴呼叫 m表示層數

void fun(int m)

int i;

for(i=0; iif(istrue(m, i)) // 回溯演算法

}}int main(void)

執行環境:dev-c++ 5.11

c語言八皇后問題

在西洋棋裡面,皇后是最具有殺傷力的 它可以對它的十字形和對角線元素進行攻擊。八皇后問題就是在8 8的棋盤上的每一行都放置乙個皇后,使他們無法進行互相攻擊 思路 1.編寫乙個函式,將乙個皇后放在第一列,如果存在攻擊就把皇后放在第二列,如果每列都存在互相攻擊的情況,則這個函式返回 2.若皇后可以放在這個...

八皇后問題(C語言)

問題描述 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后。為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。例如下圖就是八皇后問題的乙個解 假如一棋盤已經正確放置了七個皇后,編寫程式求解最後乙個皇后的放置位置...

八皇后問題c語言演算法

目錄 toc 相信八皇后規則的問題,大家都很熟悉,接下來是如何分析回溯法的應用。回溯法與圖裡面的深度優先遍歷非常的類似,就是,在滿足題目條件時候,它總是優先選擇第乙個,當不滿足的時候,它會選擇接下來的乙個點,通常會用遍歷陣列的方式。總體的 構建如下 void fun n 每次填滿第一行第一列,當不滿...