遞迴——回溯思路解決 n 皇后問題
阿新 • • 發佈:2021-02-05
技術標籤:機試準備
一般來說,如果在到達遞迴邊界的某層,由於一些事實導致已經不需要任何一個子問題遞迴就可以直接返回上一層,把這種做法稱為回溯法。
#include<stdio.h>
#include<math.h>
const int maxn = 11;
int n, count = 0, P[maxn], hashTable[maxn] = {false};
void generateP( int index )
{
if( index == n + 1)
{
count++;
return;
}
for( int i = 1; i <= n; i++)
{
if( hashTable[i] == false)
{
bool flag = true;
for(int pre = 1; pre < index; pre++)
{
if( fabs(pre - index) == fabs( P[pre] - i)) flag = false;
} // 合法性檢驗
if(flag)
{
P[index] = i;
hashTable[i] = true;
generateP(index + 1);
hashTable[i] = false ;
}
}
}
}
int main()
{
n = 8;
generateP(1);
printf("%d", count);
return 0;
}