Attento che stai utilizzando la matrice C senza averla inizializzata ad un valore noto e new non la iniziallizza a zero come la calloc
codice:string LCS(string X, string Y, MatriceInt &C, MatriceChar &B) { int X_len = X.length() + 1; int Y_len = Y.length() + 1; int i,j; string lcs =" "; C = new int*[X_len]; // qui istanzi la matrice // Alloca la matrice per memorizzare la lunghezza devi vari sottoproblemi LCS B = new char*[X_len]; for (i =0; i< X_len; i++) { C[i]=new int[Y_len]; B[i]=new char[Y_len];} B[0][0] = '\\\'; for (i = 1; i< X_len; i++) { for (j = 1; j< Y_len; j++) { if (X[i-1] == Y[j-1]) { C[i][j] = 1 + C[i-1][j-1]; // e qui sommi 1 alla porcheria che contiene // dal momento che non avendo inizializzato la matrice // ad un valore noto, i valori contenuti sono causali. B[i][j] = '\\\';} else if(C[i-1][j] >= C[i][j-1]) { C[i][j] = C[i-1][j]; B[i][j] = '|';} else {C[i][j]=C[i][j-1]; B[i][j] = '-';} } } for(i = 1; i< Y_len; i++) // Costruisce la stringa di lunghezza LCS { if(C[X_len-1][i] > C[X_len-1][i-1]) lcs = lcs + Y[i-1];} return lcs; }

Rispondi quotando