算法导论 最长公共子序列(按自己思路写的)

#include   
#include   
#include   
  
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=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=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;imax)  
            max=m[i][1];  
    }  
    printf("%d\n",max);
	//printM(m,strlen(x),3,x);
	printResult(m,strlen(x),max,x);
    getchar();  
}

你可能感兴趣的:(算法导论)