没有做优化,纯回溯,自己写的。
八皇后问题的c语言描述:
#include
#include
int a[9]={0,0,0,0,0,0,0,0,0},count=0;
void f(int n);//核心
void op();//这个是找到满足条件的解的时候输出
int ct(int n);//这个函数判断是否有冲突
int main()
{
f(1);
printf("\n共有%d个解",count);
return 0;
}
void f(int n)
{
int i;
if(n==9)
{
count++;
op();
}
else
{
for(i=1;i<=8;i++)
{
a[n]=i;
if(n==1)
{
a[n]=i;
f(n+1);
}
else
if(ct(n)==1)
f(n+1);//满足条件才排下一位
}
}
}
void op()
{
int i;
printf("\n");
for(i=1;i<=8;i++)
{
printf("%d行 %d列\n",i,a[i]);
}
return;
}
int ct(int n)
{
int i;
for(i=1;i if(a[n]==a[i] || fabs(a[n]-a[i])==fabs(n-i))
return 0;
return 1;
}