|
发表于 2013-9-16 19:36:16
|
显示全部楼层
#include <stdio.h>
#define MAX 8
int jishu=0;
int OK(int n,int j,int (*a1)[MAX])
{
int i,k;
int sg1=0,sg2=0,sg3=0,sg4=0,sg5=0;
for(i=0;i<n;i++)
{
if(a1[i][j]==1)
{
sg1=1;
break;
}
}
for(i=n,k=j;i>=0,k>=0;i--,k--)
{
if(a1[i][k]==1)
{
sg3=1;
break;
}
}
for(i=n,k=j;i>=0,k<MAX;i--,k++)
{
if(a1[i][k]==1)
{
sg4=1;
break;
}
}
if(sg1|sg3|sg4)
{
return 0;
}
else
{
return 1;
}
}
void EightQueen(int n,int (*a)[MAX])
{
int i,j;
int a1[MAX][MAX];
for(i=0;i<MAX;i++)
{
for(j=0;j<MAX;j++)
{
a1[i][j]=a[i][j];
}
}
if(n==MAX)
{
printf("this is the no.%d :\n",jishu+1);
for(i=0;i<MAX;i++)
{
for(j=0;j<MAX;j++)
{
printf("%d ",a1[i][j]);
}
printf("\n");
}
printf("\n");
jishu++;
}
else
{
for(j=0;j<MAX;j++)
{
if(OK(n,j,a1))
{
for(i=0;i<MAX;i++)
{
a1[n][i]=0;
}
a1[n][j]=1;
EightQueen(n+1,a1);
}
}
}
}
void main()
{
int a[MAX][MAX]={0};
EightQueen(0,a);
} |
|