n皇后問題是指在乙個n*n的西洋棋棋盤上,有n個棋子,這n個棋子均不在同一行,同一列,同一對角線上,請問一共有幾種排列方式?
因為每列都要有棋子,所以只要把每一列的棋子所在的行數排下來就行了,比如第一列到第五列棋子所在的行數依次是24135,然後只要檢視每種方法是否滿足要求就行了。
void generate(int index)//index是所在的列數
}} if (flag)//如果不在同一對角線,那麼滿足
num++;
return;
} for (int i = 1; i <= n; i++)//當還沒裝滿一種排列的時候繼續創造排列方式 }
}
下面給出總的**
#include#includeusing namespace std;
int n;
const int maxn = 20;
int num = 0;
int p[maxn], hashtable[maxn] = ;
void generate(int index)
}} if (flag)
num++;
return;
} for (int i = 1; i <= n; i++) }
}int main()
經典遞迴 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(經典的8皇后問題)皇后的問題
問題描述 八皇后問題是乙個以西洋棋為背景的問題 如何能夠在8 8的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上,此問題進而可以推廣為n皇后的問題。解題思路 n n的矩陣,遞迴每乙個點,當皇后數量達到n的時候,進行判斷...
n皇后問題 遞迴
遞迴回溯深度優先搜尋解決n皇后問題 用三個陣列b,c,d分別記錄棋盤上的n個列,2n 1個主對角線和2n 1個負對角線的占用情況。用i,j表示皇后所在的行列,同一主對角線上的行列下標的差一樣,若用表示式i j編號,則是 n 1 n 1,所以用表示式i j n對主對角線編號,範圍是1 2n 1 同樣的...