八皇后问题---自己的想法
#include <stdio.h>
int ceng=0;
int number=0;
int zong=0;
typedef struct zuobiao{
int x;
int y;
};
zuobiao b[5];
int fun(int x,int y);
int main(void)
{
/*printf("(1,1)的搜索\n") ;
fun(1,1);
printf("number:%d\n\n",number);
zong+=number/3;
ceng=0;
number=0;
printf("(2,2)的搜索\n") ;
fun(2,2);
printf("number:%d\n\n",number);
zong+=number/3;
ceng=0;
number=0;
printf("(1,2)的搜索\n") ;
fun(1,2);
printf("number:%d",number);
zong+=number/3;
printf("总数为%d",zong); */
for(int j=1,i=1;j<=8;j++){
fun(i,j);
zong+=number;
number=0;
}
printf("共有%d种",zong);
}
int fun(int x,int y)
{
ceng++;
b[ceng].x=x;
b[ceng].y=y;
printf("%d,%d 第%d层扫描\n",x,y,ceng);
zuobiao a[25];
int count=0;
for(float j=1,i=x+1;j<=8;j++){
if(((j-y)/(i-x)==1)||((j-y)/(i-x)==-1)||j==y||i==x){
printf("skip %f,%f \n",i,j);
continue;
}
else{
int check=0;
for(int k=1;k<=ceng-1;k++){
if(j==b[k].y||i==b[k].x||((j-b[k].y)/(i-b[k].x)==1)||(j-b[k].y)/(i-b[k].x)==-1){
check=1;
}
}
if(check==1){
printf("skip %f,%f \n",i,j);
continue;
}
if(ceng==7) {
number++;
}
// printf("%d\n",count);
count++;
a[count].x=i;
a[count].y=j;
printf("found %f,%f \n",i,j);
}
}
if(ceng==7) {
printf("ceng is %d\n",ceng);
ceng-=1;
return 0;
}
printf("共计找到%d个可行点\n",count);
if(count!=0){
//printf("共计找到%d个可行点\n",count);
for(int i=1;i<=count;i++){
// printf("%d,%d \n",a[i].x,a[i].y);
// printf("共计找到%d个可行点\n",count);
fun(a[i].x,a[i].y);
}
}
ceng-=1;
return 0;
}