动态规划——最长公共子序列
2013-11-15 23:28
302 查看
#include <stdio.h> #define N 10 void LCSLength(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 = 0; i <= n; i++) c[0][i] = 0; for(i = 1; i <= m; i++) for(j = 1; j<=n; j++) { if(x[i-1]==y[j-1]) { 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); printf("%c, ",x[i-1]); }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"}; int c , b ; int i, j, m, n ; m = strlen(x); n = strlen(y); printf("m = %d, n = %d\n", m,n); LCSLength(m,n, x, y, c, b); LCS(m,n,x,b); printf("%d\n", c[m] ); system("pause"); return 0; }
相关文章推荐
- 动态规划-最长公共子序列
- 动态规划之最长递增子序列 最长不重复子串 最长公共子序列
- 动态规划 之 最长公共子序列(非连续)
- JavaScript动态规划实现最长公共子序列
- 动态规划-最长公共子序列
- 动态规划之最长公共子序列(算法导论)
- 动态规划---最长公共子序列
- 动态规划5_最长公共子序列
- 动态规划-最长公共子序列
- 动态规划——求最长公共子序列(和子串)长度
- 动态规划--最长公共子序列
- 动态规划--最长公共子序列
- 动态规划之最长公共子序列
- HDU 1243 反恐训练营 (动态规划求最长公共子序列)
- 动态规划之最长公共子序列的求解(C++实现)
- 编程算法之动态规划之最长公共子序列(java版)
- 动态规划2 - 最长公共子序列与最长公共子串
- 动态规划求最长公共子序列(Longest Common Subsequence, LCS)
- 动态规划之最长公共子序列
- 转【算法之动态规划(三)】动态规划算法之:最长公共子序列 & 最长公共子串(LCS)&字符串相似度算法