八皇后問題是乙個以西洋棋為背景的問題:如何能夠在 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...