#include<iostream> #include<string> using namespace std; const int max_length=10; void print(int b[max_length][max_length],string X,int i,int j); void LCS(string X,string Y,int b[max_length][max_length],int m,int n ) { int **c=new int*[m+1]; for(int i=0;i<m+1;++i) c[i]=new int[n+1]; for(int i=0;i<n+1;++i) c[0][i]=0; for(int i=0;i<m+1;++i) c[i][0]=0; for(int i=1;i<m+1;++i) { for(int j=1;j<n+1;++j) { if(X[i]==Y[j]) { c[i][j]=c[i-1][j-1]+1; b[i][j]=1; } else if(c[i][j-1]>=c[i-1][j]) { c[i][j]=c[i][j-1]; b[i][j]=2; } else { c[i][j]=c[i-1][j]; b[i][j]=3; } } } //下面是进行结果的输出 print(b,X,m,n); } void print(int b[max_length][max_length],string X,int i,int j) { if(0==i||0==j) return ; if(b[i][j]==1) { print(b,X,i-1,j-1); cout<<X[i]<<" "; } else if(b[i][j]==3) { print(b,X,i-1,j); } else { print(b,X,i,j-1); } } int main() { int b[max_length][max_length]={0}; string X("0abcbdab"); string Y("0bdcaba"); LCS( X, Y, b,7,6); system("pause"); return 0; }
时间: 2024-11-05 12:13:02