算法导论 · 动态规划 · 比对

  • 算法说明
    由小规模到大规模,每次都有三种情况,分别进行处理
  • 源代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;

#define maxn 101
#define minE(a, b) (a) > (b) ? (b) : (a)
int e[maxn][maxn], diff[maxn][maxn]; 
string x, y;

int main() {
	freopen("5.editDistance.txt", "r", stdin);
	memset(e, 0, sizeof(e));
	cin >> x >> y;
	int lenX = x.length();
	int lenY = y.length();
	for(int i = 0; i <= lenX; i++) e[i][0] = i; //初始化表 
	for(int j = 0; j <= lenY; j++) e[0][j] = j;
	for(int i = 0; i < lenX; i++) {
		for(int j = 0; j < lenY; j++) {
			if(x[i] == y[j]) diff[i][j] = 0;
			else diff[i][j] = 1;
		}
	}
	for(int i = 1; i <= lenX; i++) {
		for(int j = 1; j <= lenY; j++) {
			e[i][j] = minE(minE(e[i-1][j] + 1, e[i][j-1] + 1), e[i-1][j-1] + diff[i-1][j-1]);
		}
	}
	for(int i = 0; i <= lenX; i++) {
		for(int j = 0; j <= lenY; j++) {
			printf("%-3d", e[i][j]);
		}
		printf("\n");
	}
	printf("%d", e[lenX][lenY]);
	return 0;
}
  • 输入数据
    在这里插入图片描述
  • 运行结果
    在这里插入图片描述
发布了77 篇原创文章 · 获赞 40 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/y_dd6011/article/details/97433754