**(题目源于PTA)**给定两个序列 X= { x 1,x 2 ,…x m} 和 Y= { y 1 ,y 2,…y n}, 找出X和Y的最长公共子序列。其中 i 和 j 分别表示序列X和Y中元素的个数,x指向原始序列 X, b 是由LCSLength函数中计算得到的。LCS函数须输出得到的最长公共子序列。
函数接口定义:
void LCS(int i ,int j, char *x, int **b)
输入样例:先输入两个整数,分别表示两个序列中元素的个数, 然后输入两个序列中的每个字符。
4
5
a c d f
a d g h m
输出样例:逐个输出最长的公共子序列中的每个元素。输出结果时各字符用空格隔开,最后一个后面也有空格。
a d
void LCS(int i ,int j, char *x, int **b)
{
if(i==0||j==0)
return ;
if(b[i][j]==1)
{
LCS(i-1,j-1,x,b);
cout<<x[i];//printf("%c",x[i]);
printf(" ");
}
else if(b[i][j]==2)
LCS(i-1,j,x,b);
else
LCS(i,j-1,x,b);
}