关于递归求解八皇后问题

本文详细介绍了八皇后问题的递归求解过程,包括基本情况处理和深度优先搜索策略,通过实例展示了如何使用递归算法解决经典问题。

递归求解一般分为三个部分,递归深度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);
            }
        }
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值