Я застрял в этой маленькой ошибке последние два часа, и теперь я в отчаянии. Любая помощь высоко ценится!Кто изменил мою матрицу? Таинственная ошибка
Алгоритм для создания матрицы для задачи Longest Common Subsequence
между двумя последовательностями. И матрица используется в качестве справочной таблицы в подходе Dynamic Programming. Приклеивание соответствующего кода
#include <vector>
#include <cstdio>
#include <math.h>
using namespace std;
int main()
{
vector<int> A, B;
A.push_back(0);
A.push_back(15);
A.push_back(20);
B.push_back(0);
B.push_back(20);
B.push_back(15);
int a = 2;
int b = 2;
int matrix[a][b];
memset(matrix, 0, sizeof(int)*a*b);
for (int i = 0; i <= a; ++i)
{
for (int j = 0; j <= b; ++j)
{
if (i == 0 || j == 0)
{
matrix[i][j] = 0;
} else
{
if (A[i] == B[j])
{
matrix[i][j] = matrix[i - 1][j - 1] + 1;
printf("matrix at row %i column %i: %i\n", i, j, matrix[i][j]);
} else
{
matrix[i][j] = max(matrix[i - 1][j], matrix[i][j - 1]);
}
}
}
}
printf("matrix at row 1 column 2: %i\n", matrix[1][2]);
printf("matrix at row 2 column 1: %i\n", matrix[2][1]);
}
Если я скомпилировать и запустить его с
g++ -Wall soquestion1.cpp -o soquestion1
./soquestion1
Я получаю
matrix at row 1 column 2: 1
matrix at row 2 column 1: 1
matrix at row 1 column 2: 0 #WTHHHHHH, who changed my matrix!?
matrix at row 2 column 1: 1
Спасибо за чтение, что далеко.
offhandguess, одна из линий, где вы переписывание матрицы: 'матрицы [я] [J] = .. ..' ... другими словами, вы меняете матрицу. –
Вы получаете доступ к матрице 2x2 с индексами вне 0..1. Его ** неопределенное поведение **. Пример: конец вашей матрицы находится на 'matrix [1] [1]', так что вы ожидали получить от 'matrix [1] [2]' в своей первой 'printf()'? – WhozCraig
Кроме того, вы определяете массив с размерами, известными во время выполнения ('a' и' b' не являются константами). VLA еще не являются частью C++ std. Вероятно, это компилируется из-за расширения GCC (и он должен предупредить, что IIRC) – sbabbi