#include <stdio.h>
#include <string.h>
int c[20][20];
int b[20][20];
char x[20];
char y[20];
char z[20];
void LCSLength(int m,int n,char x[20],char y[20],int c[20][20],int b[20][20])
{
int i,j,ww=0;
for (i = 1; i <= m; i++) c[i][0] = 0;
for (i = 1; i <= n; i++) c[0][i] = 0;
for (i = 1; i <= m; i++)
for (j = 1; j <= n; j++) {
if (x[i]==y[j]) {
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[20],int b[20][20])
{
if (i ==0 || j==0) return;
if (b[i][j]== 1) {
LCS(i-1,j-1,x,b);
printf("%c",x[i]); }
else if (b[i][j]== 2) LCS(i-1,j,x,b);
else LCS(i,j-1,x,b);
}
int main()
{
strcpy(x," ABCBDAB");//注意最左侧一定加个空格
strcpy(y," BDCABA");//注意最左侧一定加个空格
LCSLength(7,6,x,y,c,b);
LCS(7,6,x,b);
return 0;
}
最长公共子序列LCS
最新推荐文章于 2024-04-19 21:11:21 发布