算法最长公共子序列问题


#include<stdio.h>
#include<string.h>
#include<iostream>
#define LCSLength
#define LCS
using namespace std;
int main()
{
    char string1[100];//定义字符串
    scanf_s("%s", &string1);
    printf("请输入字符串1:", string1);
    char string2[100];
    scanf_s("%s", &string2);
    printf("请输入字符串2:", string2);
    int m, n;
    m = strlen(string1);//求字符串长度
    n = strlen(string2);
    int[][]c = new int[m + 1][n + 1];//重新定义,存放公共子序列最大长度
    int[][]b = new int[m + 1][n + 1];//记录最优解来源
    for (int i = 1; i <= m; i++)
    {
        c[i][0] = 0;//初始化第一列为0
    }
    for (int j = 1; j <= n; j++)
    {
        c[0][j] = 0;//初始化第一行为0
    }
    LCSLength(c, b);
    printf("s1与s2的最长公共子序列长度为:" + c[m][n]);
    printf("s1与s2的最长公共子序列为:");
    printf(m, n, b);
}
void LCSLength(int m, int n, char* x, char* y, int** c, int** b)
{
    int i,j;
    for (i = 1; i <= m; i++) c[i][0] = 0;
    for (j = 1; j <= n; j++) c[0][i] = 0;
    for (i = 1; i <= m; i++)
        for (j = 1; j <= n; j++) 
        {
            if (x[i] == y[j])
            {
                c[i][j] = c[i - 1][j - 1] + 1;
                b[i][j] = 1;
            }
            else if (c[i - 1][j] >= c[i][j - 1]) {
                c[i][j] = c[i - 1][j];
                b[i][j] = 2;
            }
            else {
                c[i][j] = c[i][j - 1];
                b[i][j] = 3;
            }
        }
}
void LCS(int i,int j,char* x,int** b)
{
    if (i == 0 || j == 0) return;
    if (b[i][j] == 1)
    {
        LCS(i - 1,j - 1,x,b);
        cout << x[i];
    }
    else if (b[i][j] == 2) LCS(i - 1,j,x,b);
    else LCS(i,j - 1,x,b);
}



问题:1. int[][]c = new int[m + 1][n + 1];//重新定义,存放公共子序列最大长度
int[][]b = new int[m + 1][n + 1];//记录最优解来源
2. printf(m, n, b);
}
void LCSLength(int m, int n, char* x, char* y, int** c, int** b)
两个出现错误,不知道怎么改,谢谢!