八皇后问题,递归运用出错,无法返回想要的方案数

我写的代码只求了方案数,具体方案没求,怀疑是return 的问题,如何返回上一层没执行完的程序没搞懂

img

img

img

#include<stdio.h>
typedef struct {
    int val1;
    int val2;
    int val3;
}
node;
int sum=0;
//总符合条件方案数
int b(node*a[],int n,int m){
    for(int i=0;i<n;i++){
        a[m]->val1 =i;
        //用来判断同一竖行上是否只有一点
        //注意到副对角线及其平行线上点,横纵坐标之和相等
        //用来判断副对角及其平行线上是否只有一个点
        a[m]->val2 =i+m;
        //用来判断主对角线及其平行线上是否只有一点
        //同一主对角线及其平行线上点横纵坐标之差相等
        a[m]->val3 =i-m;
        m++;
        //横坐标
        for(int j=0;j<m-1;j++){
            //循环判断
            if(a[m-1]->val1==a[m-2-j]->val1||a[m-1]->val2==a[m-2-j]->val2||a[m-1]->val3==a[m-2-j]->val3){
                return 0;
            }
           if(m==n){
            sum++;//如果到最后一行仍成立,方案数加1
            break;
        }
        }
        return b(a,n,m);
    }
    return 0;
}
int main(){
    int n;
    //行与列数
    scanf("%d",&n);
    node*a[n];
    //设下标为纵坐标固定 ,改变横坐标
    int m=0;
    b(a,n,m);
    printf("%d",sum);
    return 0;
}


node*a[n]; 你这也没给数组元素分配空间啊
改成

node *a = (node*)malloc(sizeof(node)*n);

另外b函数的逻辑好像也不对啊,直接return 0了啊

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632