zoukankan      html  css  js  c++  java
  • 最长公共子序列问题

    最长公共子序列问题

    这是我们试验课做过的实验,验证过的

    #include<iostream>
    using namespace std;
    char result[101];
    int c[100][100],b[100][100];
    int LCSLength(int m,int n,char *x,char *y,int c[100][100],int b[100][100])
    {
    int i,j;
    for(i=1;i<=m;i++)
    c[i][0]=0;
    for(i=1;i<=n;i++)
    c[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][j]=c[i][j-1];
    b[i][j]=3;
    }
    }
    }

    cout<<"jieguo:"<<endl;
    for(i=1;i<=m;i++)
    {
    for(j=1;j<=n;j++)
    {
    cout<<c[i][j]<<" ";
    }
    cout<<endl;
    }
    return c[m][n];
    }


    void LCS(int i,int j,char *x,int b[100][100],int a)
    {

    if(i==0||j==0) return;
    if(b[i][j]==1)
    {

    // result[a]=x[i-1];
    // a--;

    LCS(i-1,j-1,x,b,a);
    cout<<x[i];

    }
    else
    {
    if(b[i][j]==2)
    {
    LCS(i-1,j,x,b,a);
    }
    else
    {
    if(b[i][j]==3)
    {
    LCS(i,j-1,x,b,a);
    }
    else
    {
    LCS(i-1,j,x,b,a);
    }
    }
    }
    }

    int main()
    {
    int m=7,n=6;
    char x[7]={'A','B','C','B','D','A','B'};
    char y[6]={'B','D','C','A','B','A'};

    int i=0,j=0;
    int a=LCSLength(m,n,x,y,c,b);
    cout<<a<<endl;
    //char result[a];
    LCS(i,j,x,b,a);


    for(int k=0;k<a;k++)
    {
    cout<<result[k];
    cout<<" 111122"<<endl;
    }
    cout<<endl;
    return 0;
    }

  • 相关阅读:
    c/c++ -->对象和类
    zynq基础-->LINUX 设备树
    zynq基础-->yocto
    python3-->基础操作
    构建之法-->概论
    zynq基础-->linux下软件应用
    zynq基础-->系统构架
    网络基础-->http协议
    (转)频谱仪测试pll锁定时间
    modelsim仿真
  • 原文地址:https://www.cnblogs.com/zkn11199/p/5555082.html
Copyright © 2011-2022 走看看