//N皇后問題的簡單實現
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void PrintTheSulotion(int *Queen,int n)
{
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(j-Queen[i])
printf("O ");
else
printf("X ");
}
putchar('\n');
}
putchar('\n');
}
bool Judge(int *Queen,int set)
{
for(int i=1;i<set;i++)
if( abs(i-set)==abs(Queen[i]-Queen[set]) || Queen[i] == Queen[set] )
return false;
return true;
}
void Process(int *Queen,int set,int n)
{
static int cnt = 0;
if(set>n){
printf("No.%d:\n",++cnt);
PrintTheSulotion(Queen,n);
}
else
for(int i=1;i<=n;i++){
Queen[set] = i;
if(Judge(Queen,set))
Process(Queen,set+1,n);
}
}
int main(void)
{
int *Queen;
int n;
printf("input the number of the Queen:");
scanf("%d",&n);
Queen = (int *)malloc((n+1) * sizeof(int));
Process(Queen,1,n);
free(Queen);
return 0;
}