计算N皇后的个数
1:注意特殊情况;2:采用递归和回溯的方法;3:设置数组保持每一行皇后摆放的位置,并计算当前位置是否满足题意
int totalNQueens(int n)
{
if( n <= 0 )
{
return 0;
}
vector<int> pos(n, 0);
int totalNumber = 0;
for(int i = 0; i < n; i++)
{
pos[0] = i;
totalNQueensCore(n, 1, totalNumber, pos);
}
return totalNumber;
}
void totalNQueensCore(int n, int curIndex, int &totalNumber, vector<int> &pos)
{
if(curIndex == n)
{
totalNumber += 1;
return;
}
for(int i = 0; i < n; i++)
{
pos[curIndex] = i;
if(checkQueens(pos, curIndex))
{
totalNQueensCore(n, curIndex + 1, totalNumber, pos);
}
}
}
bool checkQueens(vector<int> &pos, int curIndex)
{
for(int i = 0; i < curIndex; i++)
{
if(pos[i] == pos[curIndex] || pos[i] - pos[curIndex] == i - curIndex || pos[i] - pos[curIndex] == curIndex - i)
{
return false;
}
}
return true;
}