八皇后問題是乙個以西洋棋為背景的問題:如何能夠在 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 每次填滿第一行第一列,當不滿...