#include "stdafx.h" #include <iostream> #include <math.h> using namespace std; int c[8][7],b[8][7]; void LCS_length (const string& x, const string& y) { int m = x.length(); int n = y.length(); for (int i = 0; i <= m; i++) c[i][0] = 0; for (int j = 1; j <= n; j++) c[0][j] = 0; for (int i = 1; i <= m; i++) for (int j = 1; j <= n; j++) { if (x[i-1] == y[j-1])//x y 都是从下标 0 开始存储 { c[i][j] = c[i-1][j-1] + 1; b[i][j] = 0; } else if (c[i-1][j] >= c[i][j-1]) { c[i][j] = c[i-1][j]; b[i][j] = 1; } else { c[i][j] = c[i][j-1]; b[i][j] = -1; } } } void Print_LCS (const string& x, int i, int j) { if (i == 0 || j == 0) return; if (b[i][j] == 0) { Print_LCS (x, i-1, j-1); cout<<x[i-1];//x 从下标0开始 } else if (b[i][j] == 1) Print_LCS (x, i-1, j); else Print_LCS (x, i, j-1); } int main() { string x = "ABCBDAB"; string y = "BDCABA"; LCS_length (x, y); for (int i = 0; i < 8; i++) { for (int j = 0; j < 7; j++) { if(j != 0) cout<<" "; cout<<c[i][j]; } cout<<endl; } Print_LCS (x, 7, 6); return 0; }