我写的代码只求了方案数,具体方案没求,怀疑是return 的问题,如何返回上一层没执行完的程序没搞懂
#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了啊
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!