Я получаю ошибку сегментации при проблеме суммы подмножеств в C - PullRequest
0 голосов
/ 19 сентября 2019

Мне нужно решить проблему с суммой подмножеств.Необходимо выяснить, может ли подмножество массива суммироваться до требуемого значения.Пример ввода9: 3 34 4 12 5 29 = 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;
        }

Вот мой ошибочный вывод

    1173794464 32765 4197334 
    1173794464 32765 4197334 
    1173794544 32765 

Пожалуйста, помогите мне, как исправить мой код, спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...