65,210
社区成员
发帖
与我相关
我的任务
分享#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
void LCS_length(int m,int n,char* x, char* y,int** c,int** b)
{
int i,j;
for(i=1;i <=m;i++) c[i][0]=0;//程序在这里中断!
for(i=1;i <=n;i++) c[0][i]=0;
for(i=1;i <=m;i++)
for(j=1;j <=n;j++)
{
if(x[i]==x[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 LCS(int i, int j,char *x,int** b)
{
if(i ==0 || j == 0)
return;
if(b[i][j] == 1)
{
LCS(i-1,j-1,x,b);
cout <<x[i];
}
else if(b[i][j] == 2)
{
LCS(i-1,j,x,b);
}
else
{
LCS(i,j-1,x,b);
}
}
int main()
{
// char* X = "ABCBDAB";
// char* Y = "BDCABA";
char* X = "ACCGGTCGAGTGCGCGGAAGCCGGCCGAA";
char* Y = "GTCGTTCGGAATGCCGTTGCTCTGTAAA";
int m = strlen(X);
int n = strlen(Y);
int** c = new int*[m+1];
for(int i = 0; i < m+1; i++)
c[i] = new int[n+1];
int** b = new int*[m+1];
for(int i = 0; i < m+1; i++)
b[i] = new int[n+1];
LCS_length(m,n,X,Y,c,b);
LCS(m,n,X,b);
for(int i = 0; i < m+1; i++)
delete []c[i];
delete []c;
for(int i = 0; i < m+1; i++)
delete []b[i];
delete []b;
return 0;
}
CCGGTCGGGGCGGCCGA