/*八皇后程序*/
/*程序说明:a[i]=j表示第i行在第j列上有皇后*/
/*请大侠们帮忙看下,谢谢!*/
#include <stdio.h>
int bijiao(int a,int b)
{
return (a==b)?1:0;
}
int function1(int a[],int n) /*用来检验两个皇后是否在同一列,如果在同列,返回0*/
{
int i=1,j,sum=0;
for(;i<n;i++)
for(j=i+1;j<n;j++)
{
sum+=bijiao(a[i],a[j]);
if(sum>0)
break;
}
return sum;
}
int function2(int a[],int n) /*函数用来检验任意两个数是否成对角线,如果有,返回0*/
{
int i,j,x;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
x=a[i]-a[j];
if(x<0)
x=-x;
if(x==j-i)
return 0;
}
return 1;
}
main()
{
int a[9]={0};
int i;
for(a[1]=1;a[1]<9;a[1]++)
for(a[2]=1;a[2]<9;a[2]++)
for(a[3]=1;a[3]<9;a[3]++)
for(a[4]=1;a[4]<9;a[4]++)
for(a[5]=1;a[5]<9;a[5]++)
for(a[6]=1;a[6]<9;a[6]++)
for(a[7]=1;a[7]<9;a[7]++)
for(a[8]=1;a[8]<9;a[8]++)
{
if((!function1(a,9))||(!function2(a,9)));/*只要有a[i]a[j]的差绝对值等于j-i,则说明它们在同对角线上,则循环继续*/
continue;/*只要有两个a[i]a[j]相等,则循环继续*/
for(i=1;i<9;i++)
printf("%d",a[i]);
printf("\n");
}
getch();
}