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

来源:互联网 发布:网络计划图关键线路 编辑:程序博客网 时间:2024/06/06 08:40


算法原理分析:









代码实现:

#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][n]);
  
 }
 
void main()
{
                char A[N];
        char B[N];
char C[N];
char D[N];
                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);

}

运行结果:


1 0
原创粉丝点击