好了,所以我試圖解決的揹包問題。分段故障,只有某些輸入
在小的輸入情況下,程序沒有問題的運行,並提供最佳的解決方案,但是當輸入尺寸較大,或者說在變大輸入文件中的數字,該計劃給了我一個分段錯誤。我不明白爲什麼會發生這種情況,因爲INT的最大值也超過了這些數字中的任何一個。
這是我的代碼。
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int W,n,i,j,k ;
scanf("%d %d",&W,&n); // capacity of knapsack and number of total items
int value[n+1],weight[n+1];
int** A;
A = (int **)malloc((n+1)*sizeof(int*));
for(i=0;i<W+1;i++)
A[i]=(int *)malloc(sizeof(int)*(W+1));
for(i=1;i<n+1;i++)
{
scanf("%d %d",&value[i],&weight[i]); //taking value and weight of each item
}
for(i=0;i<W+1;i++)
A[0][i]=0;
for(i=0;i<n+1;i++)
A[i][0]=0;
for(i=1;i<n+1;i++)
{
for(j=1;j<W+1;j++)
{
if(j-weight[i]<0)
{
A[1][j]=A[0][j];
}
else
{
if(A[0][j]>A[0][j-weight[i]]+value[i])
A[1][j]=A[0][j];
else
A[1][j]=A[0][j-weight[i]]+value[i];
}
}
for(k=0;k<W+1;k++)
A[0][k]=A[1][k];
}
int max=0;
i=1;
for(i=0;i<2;i++)
for(j=0;j<W+1;j++)
{
if(A[i][j]>max)
max=A[i][j];
}
printf("%d\n",max);
return(0);
}
它運行完美此輸入http://spark-public.s3.amazonaws.com/algo2/datasets/knapsack1.txt
但是當輸入的大小是在一個給出的鏈接,它提供了一個賽格故障http://spark-public.s3.amazonaws.com/algo2/datasets/knapsack2.txt 感謝您的幫助!
您可能需要使用調試符號編譯程序和附加一個調試器。它會告訴你確切的程序段錯誤。 – Sjoerd
你最近怎麼樣? 'int value [n + 1],weight [n + 1];'這甚至不應該編譯。 – sgarizvi
@ sgar91看起來像完全有效的C99。把自己從八十年代拖出去! – ams