|
发表于 2022-4-13 19:01:38
From FishC Mobile
|
显示全部楼层
#include<stdio.h>
int pd(int a[][8],int y,int x);
void dy(int a[][8]);
void csbh(int a[][8],int y);
void dy(int a[][8])
{
static int m=1;
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n …%d…\n",m++);
}
void csbh(int a[][8],int y)
{
for(int i=0;i<8;i++)
{
a[y][i]=0;
}
}
void b(int a[][8],y)
{
for(int i=0;i<8;i++)
{
csbh(a,y); //每判断下一个前点初始化本行
if(pd(a,y,i)) //判断点能不能用
{
a[y][i]=1; //能用写1
if(y>=7)
{
dy(a);
continue;//如果最后一行就打印结果并判断下一个点
}
//加一行往下递
b(a,y+1);
}
}
}
int pd(int a[][8],int y, int x)
{
int x1,y1;
y1=y;
while(--y1>=0)
{
if(a[y1][x])//检查上面
{
return 0;
}
}
x1=x;
y1=y;
while(--y1>=0 && --x1>=0)
{
if(a[y1][x1]) //检查左上
{
return 0;
}
}
x1=x;
y1=y;
while(--y1>=0 && ++x1<8)
{
if(a[y1][x1]) //检查右上
{
return 0;
}
}
return 1;//都检查完就返回1 (可以用)
}
void csz(int a[][8])
{
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
a[i][j]=0;
}
int main()
{
int a[8][8]={0};
for(int i=0;i<8;i++)
{
csz(a);
a[0][i]=1;
b(a,1);
}
return 0;
} |
|