动态规划——编辑距离问题
2015-05-08 20:56
141 查看
算法原理分析:
代码实现:
#include "stdio.h"
#include "string.h"
#define N 100
int min(int a,int b,int c)
{
int t = a < b ? a : b;
return t < c ? t : c;
}
void Distance(char *s1,int m,char *s2,int n) //编辑最短距离算法代码
{
int k;
int** d=new int*[n+1]; // 申请二维动态数组
for( k=0;k <=n;k++)
d[k]=new int[m+1];
int i,j;
for(i = 0;i <= m;i++)
d[i][0] = i;
for(j = 0;j <= n;j++) d[0][j] = j;
for(i = 1;i <= m;i++)
for(j = 1;j <= n;j++)
{
int cost = s1[i-1] == s2[j-1] ? 0 : 1;
int del = d[i-1][j] + 1; //删除操作
int ins = d[i][j-1] + 1; //添加操作
int sub = d[i-1][j-1] + cost; //替换操作
d[i][j] = min(del,ins,sub);
}
printf("字符串A转换为字符串B所需的最少次数为%d\n",d[m]
);
}
void main()
{
char A
;
char B
;
char C
;
char D
;
int i,m,n;
FILE *fp;
fp=fopen("input.txt","w");
printf("字符串A =");
scanf("%s",A);
fflush(stdin);
printf("字符串B =");
scanf("%s",B);
fputs(A,fp);
fputs(B,fp);
fclose(fp);
m=strlen(A);
n=strlen(B);
Distance(A,m,B,n);
//将文件中的内容读出来
for(i=0;i<m;i++)
C[i+1]=A[i];
C[i+1] = '\0';
strcpy(A,C);
for(i=0;i<n;i++)
D[i+1]=A[i];
D[i+1] = '\0';
strcpy(B,D);
fp=fopen("output.txt","w");
fprintf(fp,"%d",n);
fclose(fp);
}
运行结果:
相关文章推荐
- python - 动态规划 - 0-1背包问题
- 一步一步看清动态规划----背包问题(java解)
- 动态规划经典问题---最长公共子序列(LCS)
- 动态规划~数塔问题
- HDOJ1574 RP问题 动态规划 简单DP
- 【转】动态规划解最长公共子序列问题
- 机试算法讲解: 第52题 动态规划之搬寝室问题
- 动态规划之01背包问题
- 动态规划—最长子序列问题
- 斐波那契系列问题的递归和动态规划2
- 动态规划解最长公共子序列问题LCS(一)
- 51nod 编辑距离问题(动态规划)
- 递归与动态规划---N皇后问题的递归方法和位运算方法
- 0-1 背包问题——动态规划
- [置顶] 活动选择问题(1)-动态规划分析
- 动态规划求解01背包问题,最长递增子序列
- 【动态规划】【RQNOJ】购物问题
- (3)最大子段和问题____动态规划
- 数字三角形问题 动态规划问题 状态转移方程
- 【动态规划】序列连配问题:编辑距离