程序分为两个部分LCSLength()函数寻找最长公共子序列,LCS()函数打印最长公共子序列
具体代码如下
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int c[7][7],b[7][7];
char x[7],y[7];
int *p[7],*q[7];
void LCSLength(int m,int n,char *x,char *y,int **c,int **b);
cout<<"请输入第一个数组:"<<endl;
for(int k=0;k<7;k++)
{
cin>>x[k];
p[k]=c[k];
q[k]=b[k];
}
cout<<"请输入第二个数组:"<<endl;
for(int l=0;l<7;l++)
{
cin>>y[l];
}
LCSLength(7,7,x,y,p,q);
return 0;
}
void LCSLength(int m,int n,char *x,char *y,int **c,int **b)
{
int i,j;
int *z[7];
for(i=0;i<m;i++)
{
c[i][0]=0;
b[i][0]=0;
}
for(i=0;i<n;i++)
{
c[0][i]=0;
b[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-1][j]<c[i][j-1]
{
c[i][j]=c[i][j-1];
b[i][j]=3;
}
}
cout<<endl;
}
for(int o=0;o<7;o++)
{
z[o]=b[o];
}
LCS(7,7,x,z);
}
void LCS(int i,int j,char *x,int **b)
{
cout<<"最长公共子序列为:"<<endl;
for(int k=0;k<i;k++)
{
for(int l=0;l<j;l++)
{
if(b[k][l]==1)
{
cout<<x[k];
}
}
}
cout<<endl;
}
运行结果为:
其输入数组第一个值为数组长度,后面为要求的序列