#include<stdio.h>
int main(){
char a[20]="ACTG",b[20]="ACGGA";
int LCS[10][10]={0},i=0,j=0;
// while(a[i]!='\0'&&a[j]!='\0'){
// if(i==0||j==0)
// LCS[i][j]=0;
// else if(a[i]==a[j])
// LCS[i][j]=LCS[i-1][j-1]+1;
// else if(a[i]!=a[j])
// LCS[i][j]=LCS[i-1][j]>LCS[i][j-1]?LCS[i-1][j]:LCS[i][j-1];
// i++,j++;
// }
// printf("最长公共子序列为:%d",LCS[i-1][j-1]) ;
for(i=0;a[i]!='\0';i++){
for(j=0;b[j]!='\0';j++){
if(i==0||j==0) //a,b,两个序列长度为0
LCS[i][j]=0;
else if(a[i]==a[j]) //两个字符匹配,需要加1
LCS[i][j]=LCS[i-1][j-1]+1;
else if(a[i]!=a[j]) //不匹配,找左边或者上面最大的一个数
LCS[i][j]=LCS[i-1][j]>LCS[i][j-1]?LCS[i-1][j]:LCS[i][j-1];
}
}
for(i=0;a[i]!='\0';i++){
for(j=0;b[j]!='\0';j++){
printf("%d\t",LCS[i][j]);
}
printf("\n");
}
printf("最长公共子序列为:%d",LCS[i][j]) ;
return 0;
}
最长公共子序列LCS(动态规划)
最新推荐文章于 2024-07-16 18:11:29 发布