大家好我是一个刚刚上初二的小白,这是我人生中第一篇博客,我鼓足勇气发出来的,如果有错误,或说的不对请指出;那么首先这是一篇关于洛谷上面八皇后的问题;
#include<stdio.h>
int j,n,m,count=0;
int a[20];
int b[40];//不需要行,因为一层只排一个皇后;此为记录列有没有重复;
int u[40];//左上和右下;因为相减为定值;
int v[40];//相反相加为定值;
void print()//用于输出;
{
if(count<=3)
{
for(int i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
}
void dfs(int x)//一共8个皇后,当x大于8时代表到了最后一个皇后;打印前面皇后的位置;
{
if(x>n)
{
count++;//计数;
print();
return;
}
for(int i=1;i<=n;i++)
{
if(!b[i]&&!u[x-i+n]&&!v[x+i])//判断列和两斜角看有没有在同一条线上;
{
b[i]=1;
u[x-i+n]=1;//如果没有标记;
v[x+i]=1;
a[x]=i;
dfs(x+1);//下一个皇后;
b[i]=0;
u[x-i+n]=0;//回溯的时候取消标记;
v[x+i]=0;
}
}
}
int main()
{
scanf("%d",&n);
dfs(1);
printf("%d",count);
}
你学废了吗?