#include<stdio.h>
#include<string.h>
char X[100],Y[100];
char res[100];
int k=0;
int func(char x[],char y[],int i,int j)
{
int m,n;
if(i==0 || j==0)
{
for(m=0;m<=i;m++)
for(n=0;n<=j;n++)
if(x[m]==y[n])
return 1;
return 0;
}
else
if(x[i]==y[j])
return func(x,y,i-1,j-1)+1;
else
if(func(x,y,i-1,j)>=func(x,y,i,j-1))
return func(x,y,i-1,j);
else
return func(x,y,i,j-1);
}
void outList(char x[],char y[],int i,int j)
{
int m,n;
if(i==0 || j==0)
{
for(m=0;m<=i;m++)
for(n=0;n<=j;n++)
if(x[m]==y[n])
{
res[k++]=x[m];
return;
}
return;
}
else
if(x[i]==y[j])
{
res[k++]=x[i];
outList(x,y,i-1,j-1);
}
else
if(func(x,y,i-1,j)>=func(x,y,i,j-1))
outList(x,y,i-1,j);
else
outList(x,y,i,j-1);
}
int main()
{
int n1,n2;
printf("First List:\n");
scanf("%s",X);
n1=strlen(X);
printf("Second List:\n");
scanf("%s",Y);
n2=strlen(Y);
int sum=0;
sum=func(X,Y,n1-1,n2-1);
printf("Common List:");
outList(X,Y,n1-1,n2-1);
for(int i=sum-1;i>=0;i--)
printf("%c",res[i]);
printf("\nThe length:%d\n",sum);
return 0;
}
最长公共子序列
最新推荐文章于 2018-11-20 12:51:34 发布