码迷,mamicode.com
首页 > 其他好文 > 详细

最长公共子序列

时间:2015-12-20 00:40:42      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

 1 /*
 2 ========最长公共子序列========
 3 所用算法 动态规划
 4 作者 程松
 5 时间 2015/12/11 16:43
 6 所用语言 c++
 7 */
 8 #include<iostream>
 9 #include<cstring>
10 #include<string>
11 using namespace std;
12 const int MAX_LENGTH = 1000;//定义字符串最大长度
13 int c[MAX_LENGTH][MAX_LENGTH];//长度为i的字符串x与长度为j的字符串的最长公共子序列长度
14 int b[MAX_LENGTH][MAX_LENGTH];//做标记
15 string x,y;
16 int x_length,y_length;
17 void init(){
18     cin>>x;
19     cin>>y;
20     x_length = x.size();
21     y_length = y.size(); 
22     c[0][0]=-1;//以下循环i,j从1开始需单独让c[0][0]为-1,最初因此原因导致错误,勿忘勿忘
23     for(int i=1;i<=x_length;++i){
24         for(int j=1;j<=y_length;++j){
25             c[i][j] = -1;//未计算过设为-1,用作备忘录
26             b[i][j] = 0;
27         }
28     }
29 }
30 int LCSLength(int i,int j,string x,string y){
31     int maxlength;
32     //记录此时的长度,做备忘录
33     if(c[i][j]!=-1){
34         maxlength = c[i][j];
35     }
36     //以下通过最优子结构求解
37     else if(i==0&&j==0){//边界条件,
38         maxlength = 0;
39     }
40     //以下为状态转移方程的实现
41     else if(x[i-1]==y[j-1]){
42         maxlength = LCSLength(i-1,j-1,x,y)+1;
43         b[i][j] = 1;
44     }else if(LCSLength(i-1,j,x,y)>=LCSLength(i,j-1,x,y)){
45         maxlength = LCSLength(i-1,j,x,y);
46         b[i][j] = 2;
47     }else{
48         maxlength = LCSLength(i,j-1,x,y);
49         b[i][j] = 3;
50     }
51     c[i][j] = maxlength;
52     return maxlength;
53 }
54 //LCS()用来求解出最长的序列并将其输出
55 void LCS(int i,int j,string x){
56     if(i==0||j==0)
57         return;
58     else if(b[i][j]==1){
59         LCS(i-1,j-1,x);
60         cout<<x[i-1];
61     }else if(b[i][j]==2){
62         LCS(i-1,j,x);
63     }else{
64         LCS(i,j-1,x);
65     }
66 }
67 int main(){
68     init();
69     cout<<LCSLength(x_length,y_length,x,y)<<endl;
70     LCS(x_length,y_length,x);
71     return 0;
72 }

 

最长公共子序列

标签:

原文地址:http://www.cnblogs.com/chengsong/p/5060109.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!