주어진 weight, value, max_weight 및 total_item 값에 대해서는 잘 작동하지만 가중치, 값 및 기타 변수를 변경하면 세그먼트 화 오류가 발생합니다.동적 프로그래밍을 사용한 0-1 배낭 구현
변수를 변경할 때 items->value
팩시밀리 및 items->weight
이 NULL
이됩니다.
및 items->max_weight
및 items->total_items
은 0
이됩니다.
내 코드에서 무엇이 잘못되었는지 알 수 없습니다. 미리 감사드립니다.
코드
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int total_items, max_weight;
int *weight, *value;
} Items_knapsack;
void knapsack(Items_knapsack *items, int solution[][items->max_weight + 1]);
int max(int a, int b);
int main (int argc, char *argv[])
{
int max_weight = 7, total_items = 4;
int weight[] = {0, 1, 3, 4, 5};
int value[] = {0, 1, 4, 5, 7};
Items_knapsack items = {.value = value, .weight = weight, .max_weight = max_weight, .total_items = total_items};
int solution[total_items + 1][max_weight + 1];
knapsack(&items, solution);
for (int i = 0; i < total_items + 1; i += 1)
{
for (int j = 0; j < max_weight + 1; j += 1)
{
printf("%d ", solution[i][j]);
}
printf("\n");
}
return 0;
}
void knapsack(Items_knapsack *items, int solution[][items->max_weight + 1])
{
int total_items = items->total_items;
int max_weight = items->max_weight;
for (int *i = (int *) solution; i < &solution[total_items + 1][(max_weight + 1)]; i += 1)
{
*i = 0;
}
for (int i = 1; i < total_items + 1; i += 1)
{
for (int j = 1; j < max_weight + 1; j += 1)
{
int w = *(items->weight + i); //weight of current item
int v = *(items->value + i); //value of current item
if (w > j)
{
solution[i][j] = solution[i - 1][j];
}
else
{
solution[i][j] = max(v + solution[i - 1][j - w], solution[i - 1][j]);
}
}
}
}
int max(int a, int b)
{
return (a > b) ? a : b;
}
있는 줄에 그것을 잘못 않습니다를? 어느 값이 작동하는 것으로 알려져 있으며 어떤 오류가 발생합니까? – jwdonahue
나는 코드를 컴파일 할 수 없다. – jwdonahue
@jwdonahue gcc에서 컴파일 중입니다. –