LCS
来源:互联网 发布:德州扑克算法 编辑:程序博客网 时间:2024/06/13 07:25
#include <stdio.h>
void lcs_length(const int m,const int n ,int (*count)[n+1],char (*res)[n],const char * x,const char * y);
int print_lcs(int a,int b,int n,char (*res)[n],char *y);
int main(void)
{ int m;
int n;
m=7;
n=6;
int count[m+1][n+1];
char res[m][n];
char x[7]={'A','B','C','B','D','A','B'};
char y[6]={'B','D','C','A','B','A'};
lcs_length(m,n,count,res,x,y);
for(int i=0;i<m+1;i++)
{ for(int j=0;j<n+1;j++)
printf("%d",count[i][j]);
putchar('\n');
}
for(int i=0;i<m;i++)
{ for(int j=0;j<n;j++)
printf("%c",res[i][j]);
putchar('\n');
}
printf("good\n");
print_lcs(6,5,6,res,y);
putchar('\n');
}
void lcs_length(const int m,const int n ,int (*count)[n+1],char (*res)[n],const char * x,const char * y)
{
int i,j;
for(i=0;i<n+1;i++)
count[0][i]=0;
for(i=1;i<m+1;i++)
count[i][0]=0;
for(i=1;i<=m;i++)
{ for(j=1;j<=n;j++)
{ if(x[i-1]==y[j-1])
{ count[i][j]=count[i-1][j-1]+1;
res[i-1][j-1]='!';
}
else if(count[i-1][j]>=count[i][j-1])
{ count[i][j]=count[i-1][j];
res[i-1][j-1]='|';
}
else
{ count[i][j]=count[i][j-1];
res[i-1][j-1]='-';
}
}
}
}
//参数设置是一件痛苦的事情
//递归的时候,一定要一句一句的分析函数的执行过程,
//不然是发现不了错误所在
int print_lcs(int a ,int b,int n,char (*res)[n],char *y)
{ if(a<0|| b<0)
{ putchar('\n');
return 1;
}
if(res[a][b]=='!')
{ print_lcs(a-1,b-1,n,res,y);
printf("%c",y[b]);
}
else if(res[a][b]=='|')
print_lcs(a-1,b,n,res,y);
else
print_lcs(a,b-1,n,res,y);
}
- LCS
- LCS
- lcs
- LCS
- LCS
- LCS
- LCS
- LCS
- LCS
- LCS
- lcs
- LCS
- LCS
- lcs
- LCS
- LCS
- LCS
- LCS
- DJANGO获取当前URL
- git忽略版本控制
- webView清空缓存和所有Cookie
- Android Studio
- Reactjs鼠标滚轮监听
- LCS
- Linux进程控制基础(三)
- PHPexcel数据库导出数据实例
- Android自定义带渐变色的进度条(带水滴效果)
- 在 Linux 下利用ipset大量屏蔽恶意 IP 地址
- Unity的旋转
- Ajax工作原理
- 连接SQLite数据库源码(C#)
- 百度笔试题:malloc/free与new/delete的区别