动态规划实现最长公共子序列
来源:互联网 发布:软件需求确认表 编辑:程序博客网 时间:2024/05/21 22:48
#include <iostream>using namespace std;int c[100][100];int b[100][100];//标示最长子序列void LCS_length(char *X,char *Y,int X_len,int Y_len){int i,j;for (i=0;i<=X_len;i++){c[i][0]=0;}for (j=0;j<=Y_len;j++){c[0][j]=0;}for (i=1;i<=X_len;i++){for (j=1;j<=Y_len;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;//向左}}}}void Print_LCS(char *X,int X_len,int Y_len){if (X_len==0||Y_len==0){return;}if (b[X_len][Y_len]==1){Print_LCS(X,X_len-1,Y_len-1);cout<<X[X_len];}else if (b[X_len][Y_len]==2){Print_LCS(X,X_len-1,Y_len);}else{Print_LCS(X,X_len,Y_len-1);}}int main(){char *X,*Y;X=" abcbdab";//前面留着一个空字符为了串从1开始。Y=" bdcaba";int X_len=strlen(X)-1;int Y_len=strlen(Y)-1;LCS_length(X,Y,X_len,Y_len);cout<<"最长公共子序列长度为:"<<c[X_len][Y_len]<<endl;cout<<"输出最长公共子序列:";Print_LCS(X,X_len,Y_len);cout<<endl;}
算法导论书中简单实现。其中书中对最长序列标记方法挺值得借鉴。
0 0
- 动态规划实现最长公共子序列
- 动态规划实现最长公共子序列
- 动态规划实现最长公共子序列(LCS)算法
- 动态规划之最长公共子序列---java实现
- C++实现动态规划求解最长公共子序列
- LCS问题(最长公共子序列)-动态规划实现
- Java-LCS最长公共子序列(动态规划实现)
- 动态规划之最长公共子序列问题 C++实现
- JavaScript动态规划实现最长公共子序列
- Java动态规划 实现最长公共子序列长度
- 最长公共子序列&&最长公共子串---[动态规划]
- 动态规划-最长公共子序列、最长公共子串
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- 动态规划实现最长公共子序列以及最长公共子字符串
- Java动态规划 实现最长公共子序列以及最长公共子字符串
- js,jq发送短信倒计时
- hdu 2048 and 2049(错排问题)
- android 在布局中id与orientation的关系
- iOS安全攻防(二十二):static和被裁的符号表
- 地理信息系统(GIS)的前沿技术综述
- 动态规划实现最长公共子序列
- vim中的杀手级插件: YouCompleteMe
- 显示软件新特性
- socket阻塞与非阻塞,同步与异步、I/O模型
- android adb 自动化命令
- 搜索引擎优化优化中能够被疏忽的多少项
- MAC终端命令大全 简单解释
- Java Native Interface (JNI)
- 导致上网站权重低的几点原因