#include "stdafx.h"
using namespace std;
const int n = 9;
static int matrix[n];
bool place(int row,int col)
{
for (int prev = 1; prev < row; prev++)
if (matrix[prev] == col || labs(col-matrix[prev]) == labs(row-prev)) return false;
return true;
}
void display() //打印每個皇后的列的位置
{
int i;
cout<<"[";
for (i = 1; i <=7; i++)
cout<<matrix[i]<<",";
cout<<matrix[i]<<"]"<<endl;
}
void queen(int row)
{
int count = 0;
bool ret = false;
int col = 0;
memset(matrix,0,sizeof(matrix));
while (row <= 8)
{
ret = false;
for (col = matrix[row] + 1; col <= 8; col++)
{
ret = place(row,col);
if (ret) //如果(x,y)位置能否擺放皇后
{
matrix[row] = col; //將第i行的皇后擺放在第j列
break; //跳出這一層循環,開始擺放下一行的皇后
}
}
if (!ret) //如果循環完這一行,每個位置都沖突
{
matrix[row] = 0; //將這一行的皇后位置重置為0;
row--; //返回到上一行
if(row==0)break; //如果已經返回到了第0行,說明所有情況都找完了
}
else
{
if (row == 8) //如果找到了第8行,說明有滿足條件的結果
{
display(); //輸出結果
count++;
}
else row++;
}
}
cout<<count<<endl;
}
int main()
{
queen(1);
system("pause");
return 0;
}