您的位置:首页 > 其它

动态规划——编辑距离问题

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);

}

运行结果:






内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法