Witam!
Mam takie zadanie:
Dane są dwa ciągi znaków alfanumerycznych zdefiniowanych jako X = oraz Y =
. Znaleźć ich najdłuższy wspólny podciąg.
Plik wejściowy in2a.txt:
● pierwsza linia zawiera dwie przedzielone znakiem spacji nieujemne liczby całkowite n1 oraz
n2 będące długościami dwóch porównywanych ciągów,
● w drugiej oraz trzeciej linii znajdują się odpowiednio pierwszy i drugi ciąg znaków.
Plik wyjściowy out2a.txt:
● pierwsza linia zawiera liczbę całkowitą będącą długością najdłuższego wspólnego podciągu,
● w drugiej linii zapisany jest ciąg wynikowy.
Poszukałem troszkę inforamcji w internecie i udało mi się napisać taki algorytm:
#include
#include
#include
//max(C[i-1][j],C[i][j-1]);
main()
{
FILE *in, *out;
int m,n,i,j;
if ((in=fopen("dane.txt","r"))!=NULL)
{
out=fopen("wynik.txt","w");
fscanf(in,"%d",&n);
fscanf(in,"%d",&m);
char s1[n], s2[m];
fscanf(in,"%s",s1);
fscanf(in,"%s",s2);
//printf("%d %d %s %s",n,m,s1,s2); //sprawdzenie czy działa fscanf
int L[n][m];
for(i = 0; i <= m; i++) L[i][0] = 0;
for(j = 0; j <= n; j++) L[0][j] = 0;
for(i = 1; i < m; i++)
for(j = 1; j < n; j++)
if(s1[i] == s2[j])
L[i][j] = L[i-1][j-1];
else
L[i][j] = max(L[i-1][j],L[i][j-1]);
close(in);
close(out);
}
else
printf("Blad otwarcia pliku");
getchar();
return 0;
}
Program ma być w C, więc niestety nie działa funkcja max. Może ktoś wie jak ją zadeklarować, bo ja się troszkę pogubiłem. Z góry dziękuje i pozdrawiam!