c++实现最长公共子序列
来源:互联网 发布:好源码分享 编辑:程序博客网 时间:2024/05/01 01:50
《算法导论》书中算法的实现
#include<iostream>#include<string>using std::string;using std::cout;using std::cin;void Print_LCS(int flag[],string s1,int i,int j,int n){ if(i==0||j==0) return; if(flag[i*n+j]==1) { Print_LCS(flag,s1,i-1,j-1,n); cout<<s1[i-1]; } else if(flag[i*n+j]==2) { Print_LCS(flag,s1,i-1,j,n); } else { Print_LCS(flag,s1,i,j-1,n); }}int LCS_Length(string s1,string s2){ const size_t m=s1.length(); const size_t n=s2.length(); int* p=new int[(m+1)*(n+1)](); int* flag=new int[(m+1)*(n+1)](); for(int i=1;i!=m+1;++i) { for(int j=1;j!=n+1;++j ) { if(s1[i-1]==s2[j-1]) { p[i*(n+1)+j]=p[(i-1)*(n+1)+j-1]+1; flag[i*(n+1)+j]=1; } else if(p[(i-1)*(n+1)+j]>=p[i*(n+1)+j-1]) { p[i*(n+1)+j]=p[(i-1)*(n+1)+j]; flag[i*(n+1)+j]=2; } else { p[i*(n+1)+j]=p[i*(n+1)+j-1]; flag[i*(n+1)+j]=3; } } } Print_LCS(flag,s1,m,n,n+1); delete [] p; delete[] flag; return 0;}int main(){ string s1="ABCBDAB"; string s2="BDCABA"; LCS_Length(s1,s2); cin.get(); return 0;}
- 最长公共子序列实现
- 最长公共子序列实现
- 最长公共子序列—C语言
- 动态规划实现最长公共子序列
- 最长公共子序列的Ruby实现
- Java实现最长公共子序列
- java实现最长公共子序列
- c++实现最长公共子序列
- Java实现最长公共子序列
- 动态规划实现最长公共子序列
- 最长公共子序列python实现
- 最长公共子序列及Python实现
- Java实现最长公共子序列
- Python 实现最长公共子序列LCS
- 最长公共子序列Java代码实现
- 最长公共子序列 java 代码实现
- Java实现-最长公共子序列
- 最长公共子序列LCS C++实现
- iw命令移植(arm)
- 【Oracle】PL/SQL 非预定义异常、自定义异常处理、RAISE_APPLICATION_ERROR
- 关于某些同学在win下硬盘式安装ubuntu但重启开机进入win遇到A read disk error occurred问题
- open-iscsi/scst 追踪二 (open-iscsi 用户态管理系统技术架构分析)
- [openGL]视图
- c++实现最长公共子序列
- HTTP协议 (五) 代理
- jsp获取web应用根路径的方法
- 栈链的C语言实现
- group by ,order by ,having 简单用法
- 学习《Opengl编程指南》第7版 第1章
- 登录必备
- ASP.Net 用Infragstics控件导出Excel
- HTTP协议 (六) 状态码详解