最长公共子序列核心代码(clodeblocks运行通过)

来源:互联网 发布:淘宝开店容易经营吗 编辑:程序博客网 时间:2024/04/29 13:10

1.最长公共子序列核心代码(clodeblocks运行通过)

#include <iostream>
using namespace std;
int b[100][100];
int c[100][100];
void LCSLength(int m,int n,char *x,char *y/*,int **c,int **b */)
{
    int i,j;
    for(i=1;i<=m;i++)
    {
        c[i][0]=0;
    }
    for(j=1;j<=n;j++)
    {
        c[0][j]=0;
    }
    for(i=1;i<=m;i++)
        for(j=1;j<=m;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]=3;
        }
        else
        {
            c[i][j]=c[i][j-1];
            b[i][j]=2;
        }
    }
}
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,j-1,x/*,b*/);
    else
        LCS(i-1,j,x/*,b*/);
}
int main()
{
    char x[10]={'0','A','B','C','B','D','A','B'};//第一个子序列
    char y[10]={'0','B','D','C','A','B','A'};//第二个子序列
    LCSLength(7,6,x,y);//LCSLength(第一个子序列的长度,第二个子序列的长度,x,y)
    LCS(7,6,x);//LCSLength(第一个子序列的长度,第二个子序列的长度,x)
    return 0;
}

2.运行结果



0 0
原创粉丝点击