*********************以下程序经本人在TC下编译通过***********************
#include<stdio.h>
#include<alloc.h>
void pr();
void init();
void clean();
int setT(int i,int j);
int setX(int i,int j);
int find(int i,int j,int qNum);
void wr();
int n,count=0;
char **queen;
FILE *f;
void main(){
clrscr();
init();
clean();
f=fopen("answer.txt","wt");
find(0,0,0);
printf("/ncount=%d",count);
fprintf(f,"/ncount=%d",count);
fclose(f);
getch();
}
void pr(){
int x,y;
printf("/n-------------------------------------/n");
for(x=0;x<n;x++){
for(y=0;y<n;y++)
printf("%c ",queen[x][y]);
printf("/n");
}
printf("/n-------------------------------------/n");
}
void init(){
int j;
printf("input n(n>0):");
scanf("%d",&n);
while(n<=0){
printf("input n(n>0):");
scanf("%d",&n);
}
queen=(char**)malloc(sizeof(char*)*n);
for(j=0;j<n;j++)
queen[j]=(char*)malloc(sizeof(char)*n);
}
void clean(){
int x,y;
for(x=0;x<n;x++)
for(y=0;y<n;y++)
queen[x][y]='o';
}
int setT(int i,int j){
int x;
for(x=0;x<n;x++){
if(queen[i][x]=='*')return 0;
if(queen[x][j]=='*')return 0;
}
return 1;
}
int setX(int i,int j){
int x=i,y=j;
do{
if(queen[x++][y++]=='*')return 0;
}while(x!=n&&y!=n);
x=i;
y=j;
do{
if(queen[x--][y--]=='*')return 0;
}while(x!=-1&&y!=-1);
x=i;
y=j;
do{
if(queen[x++][y--]=='*')return 0;
}while(x!=n&&y!=-1);
x=i;
y=j;
do{
if(queen[x--][y++]=='*')return 0;
}while(x!=-1&&y!=n);
return 1;
}
int find(int i,int j,int qNum){
for(;i<n;i++){
for(;j<n;j++){
if((setT(i,j)==1)&&(setX(i,j)==1)){
queen[i][j]='*';
qNum++;
if(qNum==n){
count++;
wr();
queen[i][j]='o';
return 1;
}
find(i,j+1,qNum);
queen[i][j]='o';
qNum--;
}
}
j=0;
}
return 0;
}
void wr(){
int x,y;
fprintf(f,"/n-------------------------------------/n count=%d/n/n",count);
for(x=0;x<n;x++){
for(y=0;y<n;y++){
fprintf(f,"%c ",queen[x][y]);
}
fprintf(f,"/n");
}
fprintf(f,"/n-------------------------------------/n");
}