皇后問題 經典遞迴

2021-08-15 13:14:12 字數 759 閱讀 6358

八皇后問題是乙個以西洋棋為背景的問題:如何能夠在 8×8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。

上圖是乙個合格的皇后棋盤。 如果要計算可以擺放的種數和求出擺放的情況,

解決方案就是,每次按行搜尋,然後搜尋中確保在列和兩個對角線方向上最多只有乙個皇后。

**:

#include #include #include using namespace std;

int n = 0;//棋盤大小,

int ans = 0;//解的個數

bool hashtable[20];//列占用情況, hashtable[i] = true 表示第i列被占用

bool x1[20];//左下-右上 對角線的占用情況

bool y1[20];//左上-右下 對角線的占用情況

int val[100][100];

int p[20] = ;//存放臨時取列情況

void dfs(int deep)

ans++;

return;

} for (int i = 0; i < n; i++) }}

int main()

printf("\n");

} return 0;

}

經典遞迴問題 八皇后

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。解題思路 在這之前我們要明確遞迴求解其實是分成兩個部分的 遞迴回朔...

經典遞迴 N皇后問題

用來存放皇后,轉換為二維矩陣,元素座標為 i,q i int n 4 void nqueen int k int main void nqueen int k for int i 0 i n i if j k 首先盯著第二個 for loop 看 for int i 0 i n i 函式的遞迴發生在...

遞迴經典問題 N皇后問題

n皇后問題是指在乙個n n的西洋棋棋盤上,有n個棋子,這n個棋子均不在同一行,同一列,同一對角線上,請問一共有幾種排列方式?因為每列都要有棋子,所以只要把每一列的棋子所在的行數排下來就行了,比如第一列到第五列棋子所在的行數依次是24135,然後只要檢視每種方法是否滿足要求就行了。void gener...