#include <stdio.h>
#include <string.h>
#define MAX 100
void lcsl(int m,int n,char *x,char *y,int c[][MAX],int b[][MAX]){
int i,j;
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, int b[][MAX]){
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 (){
char x[MAX];
char y[MAX];
int b[MAX][MAX];
int c[MAX][MAX];
int m,n;
printf("输入第一个字符串:\n");
gets(x);
printf("输入第二个字符串:\n");
gets(y);
m = strlen(x);
n = strlen(y);
lcsl(m,n,x,y,c,b);
printf("最长公共子序列为:\n");
lcs(m,n,x,b);
getchar();
}
12-29
12-28
1万+
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交