我在C语言的子集和问题上遇到了一个分段错误
我需要处理一个子集和问题。它需要弄清楚数组的一个子集是否可以求和到所需的值。 样本输入我在C语言的子集和问题上遇到了一个分段错误,c,algorithm,subset-sum,C,Algorithm,Subset Sum,我需要处理一个子集和问题。它需要弄清楚数组的一个子集是否可以求和到所需的值。 样本输入 9:33441252 9=5+4 但是,我得到了一个分段错误和下面的一些警告 logParse.c: In function ‘findSubset’: logParse.c:37:4: warning: passing argument 2 of ‘subsetSum’ from incompatible pointer type [enabled by default] subsetSum(set
9:33441252
9=5+4
但是,我得到了一个分段错误和下面的一些警告
logParse.c: In function ‘findSubset’:
logParse.c:37:4: warning: passing argument 2 of ‘subsetSum’ from incompatible pointer type [enabled by default]
subsetSum(set, subSet, size, 0, 0, 0, sum);
^
logParse.c:21:6: note: expected ‘int *’ but argument is of type ‘int **’
void subsetSum(int set[], int subSet[], int n, int subSize, int total, int nodeCount ,int sum) {
^
gcc logParse.c -o logParse
logParse.c: In function ‘findSubset’:
logParse.c:37:4: warning: passing argument 2 of ‘subsetSum’ from incompatible pointer type [enabled by default]
subsetSum(set, subSet, size, 0, 0, 0, sum);
^
logParse.c:21:6: note: expected ‘int *’ but argument is of type ‘int **’
void subsetSum(int set[], int subSet[], int n, int subSize, int total, int nodeCount ,int sum) {
这是我的错误代码 void displaySubset(int subSet[], int size) {
int i;
int subset[size];
for(i = 0; i < size; i++) {
printf("%d ",subset[i]);
//printf(" ");
}
printf("\n");
}
void subsetSum(int set[], int subSet[], int n, int subSize, int total, int nodeCount ,int sum) {
int i;
if( total == sum) {
displaySubset(subSet, subSize); //print the subset
subsetSum(set,subSet,n,subSize-1,total-set[nodeCount],nodeCount+1,sum); //for other subsets
return;
}else {
for(i = nodeCount; i < n; i++ ) { //find node along breadth
subSet[subSize] = set[i];
subsetSum(set,subSet,n,subSize+1,total+set[i],i+1,sum); //do for next node in depth
}
}
}
void findSubset(int set[], int size, int sum) {
int subSet[size]; //create subset array to pass parameter of subsetSum
subsetSum(set, subSet, size, 0, 0, 0, sum);
}
int main(int argc, char *argv[]){
int weights[] = {10, 7, 5, 18, 12, 20, 15};
int size = 7;
findSubset(weights, size, 35);
return 0;
}
请帮助我如何修复我的代码,感谢findSubset函数中的,当调用subsetSum时,您使用的是int*数组,而实际上它需要int数组。声明int子集[size],而不是int*子集[size]。
int子集[size];对于(i=0;i
显示随机数据。为什么要打印未初始化的数组?这是您编写的代码还是您试图调试的其他人的代码?@chux我从这里得到了它,我需要在我的项目中实现此算法,我将尝试使子进程能够处理subtasks@omermuhit您的链接有void displaySubset(int subSet[],int size){for(int i=0;i 1173794464 32765 4197334
1173794464 32765 4197334
1173794544 32765