Я решаю проблему с нулевой сумкой.Я решил проблему с помощью алгоритма перебора.
В main.cpp
int main(int argc, char *argv[])
{
......
int solution;
solution = bruteForce();
......
}
Странно то, что когда я реализую bruteForce () в main.cpp, моя программа работает правильно,однако после того, как я переместил bruteForce () в bruteForce.cpp и включил его в main.cpp, программа вызовет ошибку сегментации при вызове bruteForce ().
Вот как я перемещаю bruteForce () в bruteForce.каст.Сначала я создал заголовок functions.h (потому что я хочу решить проблему другим методом после успешного применения грубой силы)
functions.h:
#include "global.h"
int bruteForce();
int multiplication( int );
А затем я переместил bruteForce () в bruteForce.cpp
#include <iostream>
#include <stdlib.h>
#include <vector>
#include "global.h"
#include "functions.h"
using namespace std;
int bruteForce()
{
int bestValue = 0;
int j, tempSize, tempValue;
int bestChoice[n+1];
for(int i=0; i<multiplication(n); i++)
{
tempSize = 0;
tempValue =0;
j = n;
while(x[j]!=0 && j>0)
{
x[j] = 0;
j--;
}
x[j] = 1;
for(int k=1; k<=n; k++)
{
if(x[k] == 1)
{
tempSize += size[k];
tempValue += value[k];
}
}
if((tempValue > bestValue) && (tempSize <= S))
{
bestValue = tempValue;
for(int p=1; p<=n; p++)
bestChoice[p] = x[p];
}
}
for(int p=1; p<=n; p++)
x[p] = bestChoice[p];
return bestValue;
}
В global.h я объявил некоторые глобальные переменные:
#include <vector>
using std::vector;
static int n, S;
static vector<int> value, size, x;
Отладчик GDB показывает
Program received signal SIGSEGV, Segmentation fault.
0x08049308 in main()
Есть идеи о том, почему это происходит?
Заранее спасибо.
О, кстати, если вам нужна дополнительная информация, вот пакет .Вы можете сначала ввести make в корне этого пакета.Затем введите это для выполнения.
./bin/01knapsack -BF inputs/n5S11.in n5s11.out