#include "OJ.h"
#include "math.h"
/*
功能: 求解放置8皇后方案的个数。
输入:
无
返回:
int:放置8皇后方案的个数
*/
int N_f=0;
int Q[100];
bool IsSafe(int row, int col)
{
for (int i = 0; i < row; i++)
{
if (Q[i] == col)
return false;
if (abs(Q[i] - col) == row - i)
return false;
}
return true;
}
bool GetSafePos(int row, int& Qi)
{
for (int i = 0; i <row;i++ )
if (Q[i] == -1)
{ GetSafePos(row - 1,Q[row - 1]); }
while (true)
{
for (int i = Qi + 1; i < N_f; i++)
{
if (IsSafe(row, i))
{
Qi = i;
return true;
}
}
Qi = -1;
if (Q[0] == -1)
return false;
if (!GetSafePos(row - 1, Q[row - 1]))
break;
}
return false;
}
int PlaceQueenMethodNum(int N)
{
/*在这里实现功能*/
int Count_Q=0;
N_f=N;
for (int i = 0; i < N; i++)
Q[i] = -1;
while (GetSafePos(N - 1, Q[N - 1]))
{
// if (!HasSolution()) return;
Count_Q++;
}
return Count_Q;
}