#include#define N 10 void LCSLength(int m, int n, char *x, char *y,int c[][N],int b[][N]) { int i, j; for(i = 1; i <= m; i++) c[i][0] = 0; for(i = 0; i <= n; i++) c[0][i] = 0; for(i = 1; i <= m; i++) for(j = 1; j<=n; j++) { if(x[i-1]==y[j-1]) { c[i][j] = c[i-1][j-1] + 1; b[i][j] = 1; }else if(c[i-1][j]>=c[i][j-1]){ c[i][j] = c[i-1][j]; b[i][j] = 2; }else{ c[i][j] = c[i][j-1]; b[i][j] = 3; } } } void LCS(int i, int j, char *x, int b[][N]) { if(i==0 || j ==0) return ; if(b[i][j]==1){ LCS(i-1, j-1, x, b); printf("%c, ",x[i-1]); }else if(b[i][j]==2) LCS(i-1, j, x,b); else LCS(i, j-1, x ,b); } int main() { char x[N]={"ABCBDAB"}; char y[N]={"BDCABA"}; int c[N][N], b[N][N]; int i, j, m, n ; m = strlen(x); n = strlen(y); printf("m = %d, n = %d\n", m,n); LCSLength(m,n, x, y, c, b); LCS(m,n,x,b); printf("%d\n", c[m][n]); system("pause"); return 0; }