算法导论 最长公共子序列(按自己思路写的)
来源:互联网 发布:淘宝2016年全年销售额 编辑:程序博客网 时间:2024/06/09 14:46
#include <stdio.h> #include <stdlib.h> #include <string.h> int getlastPos(char *s,char c,int pos) { int len=strlen(s),i; for(i=pos-1;i>=0;i--) { if(c==s[i]) return i; } return i; } int** initM(char *x,char *y) { int xlen=strlen(x); int ylen=strlen(y); int i,j; //m[i][0]:根据x[i]之后的字符进行DP,在保证x[i]开头子串最长的情况下,存储x中第i个字符在y中最后出现的位置 //m[i][1]:以x中第i个字符开头的最大子公共序列长度 //m[i][2]:以x[i]开头的最长子串下一个字符位置 int **m=(int **)malloc(xlen*sizeof(int*)); for(i=0;i<xlen;i++) { m[i]=(int*)malloc(3*sizeof(int)); } for(i=0;i<xlen;i++) { m[i][0]=m[i][1]=0;m[i][2]=xlen; } for(i=xlen-1;i>=0;i--) { m[i][0]=getlastPos(y,x[i],ylen); if(m[i][0]!=-1) m[i][1]=1; else m[i][1]=0; for(j=i+1;j<xlen;j++) { int pos=getlastPos(y,x[i],m[j][0]); if(pos>=0 && m[j][1]+1>m[i][1]) { m[i][0]=pos; m[i][1]=m[j][1]+1; m[i][2]=j; } } } return m; } void printM(int **m,int xlen,int ylen,char *x){for(int i=0;i<xlen;i++){printf("%c ",x[i]);for(int j=0;j<ylen;j++){printf("%d ",m[i][j]);}printf("\n");}}void printResult(int **m,int xlen,int max,char* x){int i,j;for(i=0;i<xlen;i++){if(m[i][1]==max)break;}while(i<xlen){printf("%c ",x[i]);i=m[i][2];}printf("\n");}void main() { char *x="ABCBDAB"; char *y="BDCABA"; /*int i=getlastPos(x,'B',5); printf("%d",i);*/ int **m=initM(x,y); int max=-1; for(int i=0;i<strlen(x);i++) { if(m[i][1]>max) max=m[i][1]; } printf("%d\n",max);//printM(m,strlen(x),3,x);printResult(m,strlen(x),max,x); getchar(); }
阅读全文
0 0
- 算法导论 最长公共子序列(按自己思路写的)
- 算法导论 最长公共子序列(原书思路)
- 算法导论 最长公共子序列
- 算法导论15.4 最长公共子序列
- 算法导论之最长公共子序列
- 最长公共子序列--【算法导论】
- 算法导论(LCS最长公共子序列)
- 算法导论—最长公共子序列
- 算法导论—最长公共子序列
- 算法导论最长公共子序列
- 算法导论 15.4 最长公共子序列
- LongestCommonSequence 最长连续公共子序列(算法导论是最长公共子序列)
- 算法导论 ch15 动态规划 最长公共子序列
- 【算法导论】动态规划之最长公共子序列
- 算法导论之动态规划:最长公共子序列
- 动态规划之最长公共子序列(算法导论)
- 最长公共子序列问题 算法导论15.4
- 算法导论--动态规划(最长公共子序列)
- 蓝桥杯java第六届决赛第三题--显示二叉树
- Nginx的启动、停止与重启
- 获取App当前版本号
- java生成word之freemarker使用
- Java中的泛型方法
- 算法导论 最长公共子序列(按自己思路写的)
- final修饰的类使用方式
- Java集合类详解
- 卸载gitlab
- #pragma once与 #ifndef的区别
- Java反射机制应用实践
- 随机森林
- 【Unity】制作手游的帧同步时遇到的问题
- CodeFroces 810A Straight «A»