/* 黃春福老師 暴力 */
# include <iostream>
# define N 8
using namespace std;
int queen[N];
int queen_ok(int i);
void N_Queen(int i);
int main()
{
N_Queen(0); // 由皇后0 開始放置
system("pause");
}
void N_Queen(int i)
{
int k, q;
if (i == N) // 若i==N, 表示已放置完N 個皇后(0, 1, …, N-1)
{
for (k = 1; k <= N-1; k++) // 檢查所有皇后是否互殺
if ( ! queen_ok(k) ) break;
if (k == N) // 找到一個正解, 顯示答案(N 個皇后之位置)
{
for (q = 0; q < N; q++)
cout << queen[q] << " ";
cout << "\n";
}
}
else // 放置第i 個皇后
{
for (q = 0; q < N; q++) // 一一嚐試將皇后i 放在各個可能位置
{
queen[i] = q; // 嚐試將皇后i 放在位置q
N_Queen(i+1); // 繼續放置下一個皇后
}
}
}
int queen_ok(int i) // 檢查皇后i 是否會殺到前面的皇后(0, 1, …, i-1)
{
int k, ok;
k = 0;
ok = 1;
while ( (k < i) && (ok == 1) )
{
if ( (queen[i] == queen[k]) || (abs(queen[i]-queen[k]) == (i-k)) )
ok = 0;
k = k+1;
}
return ok;
}