代码因为c++水平限制,主要是数组初始化或传参的问题。运行控制台程序出错。。
先放在这里,日后改动。
会转载两篇最长公共子序列的文章,我的代码是借鉴java实现的哪一篇的(数组)传参;c++的那一篇应用了全局变量,从传参中解放了!!
说了那么多,其实就是下面的代码指望继续debug才能用!!
#include <iostream>
#include <cstring>
using namespace std;
int** LCSLength(int m,int n,char *x,char *y){
int i,j;
int **b=new int *[20];
for(int i=1;i<=20;i++){
b[i]=new int [20];
}
int **c=new int *[20];
for(int i=1;i<=20;i++){
c[i]=new int [20];
}
for(int i=0;i<20;i++)
for(int j=0;j<20;j++)
{c[i][j]=0; b[i][j]=0;}
for(i=1;i<=20;i++)c[i][0]=0;
for(j=1;j<=20;j++)c[0][j]=0;
for(i=1;i<=20;i++)
for(j=1;j<=20;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;
}
return b;
}
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]; }
else if(b[i][j]==2)LCS(i-1,j,x,b);
else LCS(i,j-1,x,b);
}
int main()
{
char *x={"0abcbdab"};
char *y={"0bdcaba"};
int **b;
b=LCSLength(7,6,x,y);
LCS(7,6,x,b);
return 0;
}
错误没找到,运行出错