您的位置:首页 > 其它

“最长公共字符串子序列”问题的动态规划法算法

2008-01-03 09:39 309 查看



/**//*


    标题:<<系统设计师>>应试编程实例-[动态规划算法程序设计]


    作者:成晓旭


    时间:2002年09月15日(18:20:00-21:25:00)


          实现“最长公共字符串子序列”问题的动态规划算法实现函数


    时间:2002年09月15日(21:31:00-22:00:00)


          实现“最长公共字符串子序列”问题的动态规划算法实现函数


*/


#include    "stdio.h"


#include    "stdlib.h"


#include    "string.h"




#define    MAXN    64        //全局最大值常量


//:=========================“最长公共字符串子序列”问题的动态规划法算法=========================


//计算两个字符串序列的最长公共子序列的长度函数


int        First_Born_SubStr_Len(char *a,char *b,int substrlen[][MAXN])




...{


    int    i,j,m = strlen(a),n = strlen(b);


    for(i = 0;i <= m;i++)


        substrlen[i][0] = 0;


    for(j = 1;j <= m;j++)


        substrlen[0][j] = 0;


    for(i = 1;i <= m;i++)




    ...{


        for(j = 1;j <= n;j++)


            if(a[i - 1] == b[j - 1])


                substrlen[i][j] = substrlen[i - 1][j - 1] + 1;


            else if(substrlen[i - 1][j] >= substrlen[i][j - 1])


                substrlen[i][j] = substrlen[i - 1][j];


            else


                substrlen[i][j] = substrlen[i][j - 1];


    }


    return(substrlen[m]
);


}


//构造最长公共子序列函数


char    *Build_First_Born_SubStr(char *a,char *b,char str[])




...{


    int    k,i = strlen(a),j = strlen(b),array[MAXN][MAXN];


    k = First_Born_SubStr_Len(a,b,array);


    str[k] = '';


    while(k > 0)




    ...{


        if(array[i][j] == array[i - 1][j])


            i --;


        else if(array[i][j] == array[i][j - 1])


            j --;


        else




        ...{


            str[--k] = a[i - 1];


            i --;


            j --;


        }


    }


    return(str);


}


//测试“最长公共字符串子序列”问题的动态规划法函数


void    Run_SubString()




...{


    char    str0[MAXN],str1[MAXN],str2[MAXN];


    printf("输入第一个字符串(长度 < %d): ",MAXN);


    scanf("%s",&str1);


    printf("输入第二个字符串(长度 < %d): ",MAXN);


    scanf("%s",&str2);


    printf("其“最长公共字符串子序列” = %s ",Build_First_Born_SubStr(str1,str2,str0));


}


//:=========================“最长公共字符串子序列”问题的动态规划法算法=========================




int main(int argc, char* argv[])




...{


    //Run_SubString();


    Run_Ikebana();


    printf(" 应用程序运行结束! ");


    return 0;


}



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=935869
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐