陷入二维逻辑
Stuck in Two Dimensional Logics
本文关键字:二维 更新时间:2023-10-16
嗨,我已经为最不常见的子序列问题写了一个程序
并坚持二维数组的传递和遍历。好心帮忙。
下面是一段代码。
void backtrack(char x[], char y[], int L[][7], int m, int n)
{
if(m == 0 || n == 0)
return;
else if(x[m-1] == y[n-1])
{
backtrack(x, y, L, m-1, n-1);
cout << x[m-1] << " ";
}
else
{
if(L[m-1][n] > L[m][n-1])
backtrack(x, y, L, m-1, n);
else
backtrack(x, y, L, m, n-1);
}
}
int lcs_length(char x[], char y[], const int m, const int n)
{
int L[m+1][n+1];
for(int i=0; i<=m; i++)
{
for(int j=0; j<=n; j++)
{
if(i == 0 || j == 0)
L[i][j] = 0;
else if (x[i-1] == y[j-1])
L[i][j] = L[i-1][j-1] + 1;
else
L[i][j] = max (L[i-1][j], L[i][j-1]);
}
}
backtrack(x, y, L, m+1, n+1);
return L[m][n];
}
int main(int argc, char *argv[])
{
char x[] = "ABCDGH";
char y[] = "AEDFHR";
int m = sizeof x / sizeof *x;
int n = sizeof y / sizeof *y;
cout << lcs_length(x, y, m, n);
return EXIT_SUCCESS;
}
我基本上陷入了从lcs_length()调用回溯函数的困境,因为我无法在回溯中传递/遍历二维数组。。。
好心帮忙。。
谢谢。
lcs_length中的二维数组L不是真正的c数组,因为您使用变量来设置元素的数量。当将其大小设置为例如int L[100][7]
时,一切正常。
但为了解决您的问题,我宁愿使用真正的动态阵列,例如:
int **L = new int* [m+1];
for (int i = 0; i < m+1; i++)
L[i] = new int[n+1];
然后可以将数组作为int ** L
传递。
相关文章:
- 将二维矢量传递给类
- 将值从二维数组输出到文本文件
- 我在二维向量中是否正确分配了内存
- 带结构的二维矢量:如何存储元素
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- C++ 传递二维字符数组
- 如何正确填充在堆上分配的二维数组?
- 传递二维数组时出现问题
- 具有随机数的二维数组不会更改
- 如何在C++中获取二维数组中最少的一列数?
- 如何使用用户输入变量制作二维数组?
- C++ 中的二维整数数组,每行中的元素数量不均匀
- C++ 中动态二维数组的访问冲突
- 在二维向量或数组中可以存储的最大元素数是多少?
- 如何将整数字符串转换为整数的二维向量?
- 二维矢量数据成员
- 遍历二维数组的所有子数组
- 将二维数组的所有元素插入到一维数组中
- 在函数中传递二维数组