暂时无讲解,仅供学习参考。
int n,sum;
bool dps(int a,int b,int c,int d)//a是列位置,b是右斜线的位置,c是左斜线的位置,d是行位置
{
if(d>=n)
{
sum++;
return true;
}
int j;
for(j=0;j<n;j++)
if((a&(1<<j))==0 && (b&(1<<(j+d)))==0 && (c&(1<<(j-d+n)))==0)//位置没有被占,则下一行
dps(a^(1<<j),b^(1<<(j+d)),c^(1<<(j-d+n)),d+1);
return true;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
sum=0;
dps(0,0,0,0);
printf("%d\n",sum);
}
return 0;
}
本文提供了一种解决N皇后问题的递归算法实现,通过使用位运算来判断棋盘状态,避免皇后间的冲突,实现了对任意大小的棋盘求解有效布局方案的数量。
288

被折叠的 条评论
为什么被折叠?



