Алгоритм нахождения наибольшей общей последовательности

Подскажите пожалуйста построил алгоритм, преподаватель сказал что в нем ошибка, подскажите в чем может быть проблема? Так же по его словам не правильный рисунок выводит.

#include <string>
#define max(a,b) ((a>b) ? a : b)

using namespace std;

int** c;
string** b;

void LCS_Length(string x, string y)
{
    int m = x.length();
    int n = y.length();

     c= new int* [m + 1];
    for (int i = 0; i <= m; i++) c[i] = new int[n + 1];

     b = new string* [m + 1];
    for (int i = 0; i <= m ; i++) b[i] = new string[n + 1];

    for (int i = 1; i <= m; i++) c[i][0] = 0;
    for (int j = 0; 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]){
                c[i][j] = c[i - 1][j - 1] + 1;
                b[i][j]="\\";
            }
            else if (c[i - 1][j] >= c[i][j - 1]){
                c[i][j] = c[i-1][j];
                b[i][j] = "^";
            }
            else{
                c[i][j] = c[i][j - 1];
                b[i][j] = "<";
            }
        }
}

void print_LCS(string x, int i, int j)
{
    if (i == 0 || j == 0) return;
    if (b[i][j] == "\\"){
        print_LCS(x, i - 1, j - 1);
        cout << x[i-1];
    } else if (b[i][j] == "^") print_LCS(x, i - 1, j);
    else print_LCS(x, i, j - 1);
}

int main(){
    string x = "BDABABC";
    string y = "ADBCBA";

    LCS_Length(x, y);

    for (long unsigned int i = 0; i <= x.length(); i++){
        for (long unsigned int j = 0; j <= y.length(); j++) cout << c[i][j] << " ";
        cout << endl;
    }

    for (long unsigned int i = 0; i <= x.length(); i++){
        for (long unsigned int j = 0; j <= y.length(); j++) cout << b[i][j] << " ";
        cout << endl;
    }

    print_LCS(x, x.length(), y.length());

    return 0;
}

Ответы (0 шт):