#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)
两个出现错误,不知道怎么改,谢谢!