#include <stdio.h>
#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;
}
动态规划——最长公共子序列
最新推荐文章于 2020-12-15 20:11:06 发布