N皇后 遞迴演算法
int n;
int queenpos[100]; //用來存放算好的皇后位置。最左上角是(0.0)
void nqueen (int k);
int main()
{
cin >> n;
nqueen(0);
return 0;
}
void nqueen (int k) //在0~k~1行皇后已經擺好的情況下,擺第k行及其後的皇后
{
int i;
if( k == n ) // n個皇后已經擺好
{
for(i = 0 ; i < n ; i++)
{
cout << queenpos[i] + 1 << " ";
}
cout << endl;
return ;
}
for(i = 0; i < n ; i++) // 逐嘗試第k個皇后的位置
{
int j;
for(j = 0 ; j < k; j++) //和已經擺好的k個皇后的位置進行比較,看是否衝突
{
if( queenpos[j] == i || abs(queenpos[j] - i) == abs(k-j))
{
break; // 衝突,測試下一個位置
}
}
if(j == k) //當選的位置i不衝突
{
queenpos[k] = i; //將第k個皇后擺放在位置i
nqueen(k+1);
}
} //for(i = 0; i < n; i++)
}