资源简介
利用动态规划法求出两个序列的最长公共子序列,内含C++源代码和实验报告
代码片段和文件信息
// LCS.cpp : Defines the entry point for the console application.
//
#include “stdafx.h“
#include “iostream“
#include “string“
using namespace std;
void LCSlength(string x string yint * * a);
void LCS(int i int j string x int * * a);
int main(int argc char* argv[])
{
/*x = “zhejiang university of technology“
y = “zhejiang university city college“;
X={ABCBDAB} Y={BDCABA};*/
string x = “ “;
string y = “ “;
char X[256];
char Y[256];
cout << “请输入第一个字符串序列:“ << endl;
cin.getline(X256);
x.append(X);
cout << “请输入第二个字符串序列:“ << endl;
cin.getline(Y256);
y.append(Y);
int i;
int * * a = new int *[x.size()];
for(i = 0; i < x.size(); i ++)
a[i] = new int[y.size()];
LCSlength(xya);
cout << “最长公共子序列:“ << endl;
LCS(x.size() - 1y.size() - 1xa);
cout << endl << endl;
for(i = 0; i < x.size(); i++)
delete []a[i];
delete []a;
return 0;
}
void LCSlength(string x string yint * * a)//用二维数组a[i][j]来记录Xi和Yj的最长公共子序列的长度
{
int ij;
for(i = 0; i < x.size(); i++)
a[i][0] = 0;
for(i = 0; i < y.size(); i++) //①当i = 0或者j = 0时,a[i][j] = 0
a[0][i] = 0;
for(i = 1; i < x.size(); i++)
{
for(j = 1; j < y.size(); j++)
{
if(x[i] == y[j]) //②当i > 0,j > 0,xi = yj时,a[i][j] = a[i-1][j-1] + 1
{
a[i][j] = a[i - 1][j - 1] + 1;
}
else if(a[i - 1][j] >= a[i][j - 1])//③当i > 0,j > 0,xi≠yi,a[i-1][j] > a[i][j-1]时,a[i][j] = a[i-1][j]
{
a[i][j] = a[i - 1][j];
}
else //④当i > 0,j > 0,xi≠yi,a[i][j-1] ≥ a[i-1][j]时,a[i][j] = a[i][j-1]
{
a[i][j] = a[i][j - 1];
}
}
}
}
void LCS(int i int j string x int * * a)//根据二维数组a[i][j]来输出这个最长公共子序列
{
if(i == 0 || j ==0) return; //①二维表中的第一列和第一行中的元素都为0不必进行输出操作
if(a[i - 1][j - 1] == a[i - 1][j]
&& a[i - 1][j - 1] == a[i][j - 1]
&& a[i - 1][j] == a[i][j - 1]
&& a[i][j] == a[i - 1][j - 1] + 1)
//a[i-1][j-1] = a[i-1][j] = a[i][j-1],而且a[i][j] = a[i-1][j-1] + 1,对应于递归关系的第②种情况
{
LCS(i - 1j - 1 x a);
cout << x[i]; //此时x[i]=y[j]输出这个值
}
else if(a[i - 1][j] > a[i][j - 1])//a[i-1][j] > a[i][j-1],a[i][j] = a[i-1][j],对应于递归关系的第③种情况
LCS(i - 1 j x a);
else //a[i][j-1] ≥ a[i-1][j],a[i][j] = a[i][j-1],对应于递归关系的第④种情况
LCS(i j - 1 x a);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-03-25 22:16 最长公共子序列\
目录 0 2018-03-25 22:03 最长公共子序列\最长公共子序列\
文件 25608 2018-03-25 22:16 最长公共子序列\最长公共子序列.docx
目录 0 2017-04-15 14:17 最长公共子序列\最长公共子序列\Debug\
文件 2450 2017-04-06 16:17 最长公共子序列\最长公共子序列\LCS.cpp
文件 4500 2017-03-31 13:16 最长公共子序列\最长公共子序列\LCS.dsp
文件 531 2017-03-31 13:16 最长公共子序列\最长公共子序列\LCS.dsw
文件 58368 2017-04-16 17:50 最长公共子序列\最长公共子序列\LCS.ncb
文件 48640 2017-04-16 17:50 最长公共子序列\最长公共子序列\LCS.opt
文件 1341 2017-04-06 16:17 最长公共子序列\最长公共子序列\LCS.plg
文件 1190 2017-03-31 13:16 最长公共子序列\最长公共子序列\ReadMe.txt
文件 290 2017-03-31 13:16 最长公共子序列\最长公共子序列\StdAfx.cpp
文件 667 2017-03-31 13:16 最长公共子序列\最长公共子序列\StdAfx.h
- 上一篇:C++基础入门.md
- 下一篇:mfc中自绘menu控件的美化
相关资源
- 最长公共子序列—c++实现
- 动态规划实现最佳加法表达式求最小
- c++语言写最长公共子序列问题
- 动态规划最短路径.cpp
- 营养套餐问题
- 302_规格划分矩形.cpp
- 动态规划解TSP(旅行商)问题C++源码
- C++动态规划求解TSP问题备忘录方法
- 最优二分搜索树动态规划
- 背包问题C语言实现, 动态规划
- c语言实现的动态规划求最短路径长度
- 动态规划算法实现多段图最短路径问
- 最长公共子序列,C语言动态规划
- 最大长方体问题--动态规划C++
- c c++ 01背包问题动态规划解决
- 用动态规划法求解流水线调度问题
- 动态规划灰度压缩bmp
- QtC++用动态规划,djistra,Astar,Qlear
- 资源分配c++代码
- 动态规划实现立体匹配
- 用动态规划思想求解最长公共子串
- 旅游背包问题
评论
共有 条评论