#include <iostream>
#include <vector>
#define MAX 150
using std::cout;
using std::cin;
using std::vector;
using std::endl;
//A,B为两个序列,m,n分别为两个序列的长度,c存放最优解值,b为解矩阵
void LCS_length(vector<int> A,vector<int> B,int m,int n,int c[MAX][MAX],int b[MAX][MAX])
{
int i,j;
for(i=0;i<=m;i++)
c[i][0]=0;
for(j=0;j<=n;j++)
c[0][j]=0;
//b[i][j]=10时c[i, j]由c[i, j-1]确定
//b[i][j]=20时c[i, j]由c[i-1, j-1]确定
//b[i][j]=30时c[i, j]由c[i-1, j]确定
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
if(A[i-1]==B[j-1])
{
c[i][j]=c[i-1][j-1]+1;
b[i][j]=20;
}
else
{
if(c[i-1][j]>=c[i][j-1])
{
c[i][j]=c[i-1][j];
b[i][j]=30;
}
else
{
c[i][j]=c[i][j-1];
b[i][j]=10;
}
}
}
}
void print_LCS(int bb[MAX][MAX],vector<int> x,int a,int b)
{
if(a==0||b==0)
return;
if(bb[a][b]==20)
{
print_LCS(bb,x,a-1,b-1);
cout<<" "<<x[a-1];
}
else if(bb[a][b]==30)
print_LCS(bb,x,a-1,b);
else
print_LCS(bb,x,a,b-1);
}
void main ()
{
int xLength=0,yLength=0;
vector<int> X;
vector<int> Y;
int data;
cout<<"请输入X序列,输入元素为正整数!输入99999时表示输入结束!"<<endl;
cin>>data;
while(data!=99999)
{
X.push_back(data);
xLength++;
cin>>data;
}
cout<<"请输入Y序列,输入元素为正整数!输入99999时表示输入结束!"<<endl;
cin>>data;
while(data!=99999)
{
Y.push_back(data);
yLength++;
cin>>data;
}
cout<<"X序列的元素个数为"<<xLength<<endl;
cout<<"Y序列的元素个数为"<<yLength<<endl;
int cmatrix[MAX][MAX];
int bmatrix[MAX][MAX]={0};
LCS_length(X,Y,xLength,yLength,cmatrix,bmatrix);
cout<<"X,Y的最大公共子序列"<<endl;
print_LCS(bmatrix,X,xLength,yLength);
}
LCS.rar_LCS
版权申诉
108 浏览量
2022-09-19
13:34:40
上传
评论
收藏 1KB RAR 举报
御道御小黑
- 粉丝: 61
- 资源: 1万+
最新资源
- pcb原理图.PcbDoc
- 计算机视觉-人脸识别-开发包-商业应用-人脸识别开发包(免费,可商用,有演示、范例、说明书)完整项目实例源码.zip
- Libraries-Comm-Controller
- 豆瓣电影爬虫 爬取top电影的评论 + 每个用户的看过的电影的评论 用于推荐系统的 协同过滤+源代码+文档说明
- 交互设计课程竞品分析内容案例设计
- c07c4b30caf2ab290c3f2eea8339b34b.mp4
- emqx服务器搭建文件
- Libraries-Comm-Controller-DOC-V2-0-1-en.pdf
- update9-20240601.5.205.slice.img.7z.003
- 9f9ae03ea06c5c991afa26c5813d8831.amr
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈