递归求解一般分为三个部分,递归深度n=0时一种情况,递归深度在n>=1 && n<N-1一种情况,在n=N又是一种情况
以下是八皇后问题递归相关部分:
void recurrence(int a[][STACK_SIZE],Elem *e,int n)
{
if(e[0].number<STACK_SIZE)
{
if(n==0)
{
change(a,n,e[n].number);
recurrence(a,e,n+1);
}else if(n<STACK_SIZE-1)
{
if(e[n].number<STACK_SIZE)
{
if(a[n][e[n].number]==0)
{
change(a,n,e[n].number);
recurrence(a,e,n+1);
}else{
e[n].number++;
recurrence(a,e,n);
}
}else{
e[n].number=0;
del(a,n-1,e[n-1].number);
e[n-1].number++;
recurrence(a,e,n-1);
}
}else{
if(a[n][e[n].number]==0)
{
int i,j;
printf("No %d:\n",++count);
for(i=0;i<STACK_SIZE;i++)
{
for(j=0;j<STACK_SIZE;j++)
{
if(j==e[i].number)
{
printf("A");
}else
{
printf(".");
}
}
printf("\n");
}
}
e[n].number++;
if(e[n].number<STACK_SIZE)
{
recurrence(a,e,n);
}else{
e[n].number=0;
del(a,n-1,e[n-1].number);
e[n-1].number++;
recurrence(a,e,n-1);
}
}
}
}
本文详细介绍了八皇后问题的递归求解过程,包括基本情况处理和深度优先搜索策略,通过实例展示了如何使用递归算法解决经典问题。
1785

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



