Как удалить i строку и j столбец и перенести оставшиеся строки/столбцы в новую матрицу c++
Недавно изучаю c++. Возникла проблема, что мне нужно вычислить алгебраическое дополнение матрицы. Чтобы его вычислить, нужно удалить i строку и j столбец в уже созданной матрице и перенести оставшиеся строки и столбцы в другую матрицу. Я попытался это сделать, но по всей видимости, там проблемы с индексами при присвоении их в новую матрицу. Я знаю в чём проблема, но не могу эту штуку пофиксить. Экспериментировал с разными индексами, но не получилось. Помогите, пожалуйста. Код ниже:
int count = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
double** addition = new double* [n - 1]; // Матрица на порядок ниже, чтобы найти минор
for (int x = 0; x < (n - 1); x++)
{
addition[x] = new double[n - 1];
}
for (int x = 0; x < n; x++)
{
for (int y = 0; y < n; y++)
{
if (x != i or y != j)
{
addition[x - 1][y - 1] = matrix_copy[x][y]; // Проблема с циклами для x и y и с условием.
}
}
}
last_matrix[i][j] = addition_find(addition, n - 1, pow(-1, i + j));
cout << last_matrix[i][j] << " " << i << j << endl; // Если выводим алгебраическое дополнение Aij, то их будет всего 5
cout << count;
delete[] addition;
}
}
Проблема с частью кода для цикла:
for (int x = 0; x < n; x++)
{
for (int y = 0; y < n; y++)
{
if (x != i or y != j)
Как сделать в данных циклах, чтобы у меня в новую матрицу (addition) переносились все элементы, кроме i строки и j столбца?
Ответы (1 шт):
Как-то так, например...
for (int x = 0, row = 0; x < n; x++, row++)
{
if (x == i) { row--; continue; }
for (int y = 0, col = 0; y < n; y++, col++)
{
if (y == j) { col--; continue; }
addition[row][col] = matrix_copy[x][y];
}
}
Если x строки, а y столбцы (но вроде так у вас и есть).
Можно и по-другому. Но в принципе можно вычислять дополнение, и не создавая новую матрицу.