`

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

 
阅读更多
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog01.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
/**//*
标题:>应试编程实例-[动态规划算法程序设计]
作者:成晓旭
时间: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"

#defineMAXN64//全局最大值常量
//:=========================“最长公共字符串子序列”问题的动态规划法算法=========================
//计算两个字符串序列的最长公共子序列的长度函数
intFirst_Born_SubStr_Len(char*a,char*b,intsubstrlen[][MAXN])
...{
inti,j,m=strlen(a),n=strlen(b);
for(i=0;im;i++)
substrlen[i][
0]=0;
for(j=1;jm;j++)
substrlen[
0][j]=0;
for(i=1;im;i++)
...{
for(j=1;jn;j++)
if(a[i-1]==b[j-1])
substrlen[i][j]
=substrlen[i-1][j-1]+1;
elseif(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][n]);
}

//构造最长公共子序列函数
char*Build_First_Born_SubStr(char*a,char*b,charstr[])
...{
intk,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
--;
elseif(array[i][j]==array[i][j-1])
j
--;
else
...{
str[
--k]=a[i-1];
i
--;
j
--;
}

}

return(str);
}

//测试“最长公共字符串子序列”问题的动态规划法函数
voidRun_SubString()
...{
charstr0[MAXN],str1[MAXN],str2[MAXN];
printf(
"输入第一个字符串(长度",MAXN);
scanf(
"%s",&str1);
printf(
"输入第二个字符串(长度",MAXN);
scanf(
"%s",&str2);
printf(
"其“最长公共字符串子序列”=%s ",Build_First_Born_SubStr(str1,str2,str0));
}

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

intmain(intargc,char*argv[])
...{
//Run_SubString();
Run_Ikebana();
printf(
" 应用程序运行结束! ");
return0;
}



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=935869


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics