`
caozuiba
  • 浏览: 905062 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
/**//*
标题:<<系统设计师>>应试编程实例-[动态规划算法程序设计]
作者:成晓旭
时间: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;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;
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(
"输入第一个字符串(长度<%d): ",MAXN);
scanf(
"%s",&str1);
printf(
"输入第二个字符串(长度<%d): ",MAXN);
scanf(
"%s",&str2);
printf(
"其“最长公共字符串子序列”=%s ",Build_First_Born_SubStr(str1,str2,str0));
}

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

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics