C语言实现“八皇后问题”

来源:互联网 发布:java nio相关书籍 编辑:程序博客网 时间:2024/05/17 23:53

#include "stdio.h"
#include "stdlib.h"

int a[9]={0};
int count=0; //计数器设置为全局变量

int Check(int n) //判断此状态是否符合
{
int i;
for(i=1;i<n;i++)
if((abs(a[i]-a[n])==abs(i-n))||(a[i]==a[n]))//不符合
return 0;
return 1;
}

void Print()
{
int j,k;
printf("坐标位置:");
for(j=1;j<=8;j++)
printf("(%d,%d) ",j,a[j]);
printf("\n");
for(k=1;k<=8;k++)//输出每一行情况
{
j=1;
while(j!=a[k])
{
printf("0 ");
j++;
}
printf("1 ");
for(j++;j<=8;j++)
printf("0 ");
printf("\n");
}
}

void Queen(int i)
{

int k;
if(i>8) //输出解
{
Print();count++;//八皇后的解数目
return ;
}
else
{
for(k=1;k<=8;k++)
{
a[i]=k;
if(Check(i)) //满足条件,回溯
Queen(i+1);
else
a[i]=0; //不满足,移走
}
    }   
}
int main()
{


Queen(1);
printf("解的个数为:%d\n",count);
return 0;
}