Удалить строку и столбец из матрицы
Есть квадратная матрица размера N, задача состоит в том чтобы удалить строку и столбец матрицы на пересечении которых стоит максимальный элемент главной диагонали. Я решил создать новую матрицу и записать уже нужный массив. А дальше начинаются проблемы. Отдельно удалить или строку или столбец просто, но я не могу понять как можно сделать это вместе.
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define N 6
int TheBig(int a[][N], int size) {
int max = a[0][0];
int i ,indx=0;
for (i = 0; i < size; i++) {
if (a[i][i] > max) {
max = a[i][i];
indx = i;
}
}
printf("The biggest number on the main diagonal is - %d\n", max);
return indx;
}
int main() {
int i = 0, j = 0;
srand(time(NULL));
int a[N][N];
for (i; i < N; i++) {
for (int j = 0; j < N; j++) {
a[i][j] = rand() % 50;
printf("%3d ", a[i][j]);
}
printf("\n\n");
}
int a1[N-1][N-1];
int k = TheBig(a, N);
/*код удаления строки и столбца */
for (i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 1; j++) {
a1[i][j] = a[i][j + 1];
}
}
for (i = 0; i < N - 1; i++) {
for (int j = 0; j < N - 1; j++) {
printf("%3d ", a1[i][j]);
}
printf("\n\n");
}
return 0;
}
Ответы (2 шт):
алгоритм:
- выделить память под матрицу
NxN - заполнить матрицу соответствующими числами
- найти строку и столбец
iчей диагональный элемент максимальный - выделить память под матрицу
MxM, гдеM = N - 1 - пройтись по матрице
NxNи перенести все элементы в матрицуMxMза исключением элементов на строке и столбцуi, т.е. m[k][l] = n[x][y] - освободить память из под матрицы
NxN6.1) присвоить указатель новой матрице старой матрице
все, не надо ничего удалять из строк и столбцов - быстрее создать новую матрицу, заполнить и удалить старую
единственное, что матрицу придется создавать динамически:
int** matrix = new int* [N];
for (int index = 0; index < N; index ++)
matrix[index] = new int [N];
ну или можете создать одномерную
int* matrix = new int [N * N];
правда придется к элементам обращаться через matrix[i + N * j] в этом случае
Вам не нужен другой массив, а нужно "удалять" с данного массива. Конечно размер статического массива не изменится, но вы можете задать новый размер, в пределах которого будете работать:
/*код удаления строки */
for (int i = k; i < N - 1; i++)
for (int j = 0; j < N; j++)
a[i][j] = a[i + 1][j];
/*код удаления столбца */
for (int i = 0; i < N; i++)
for (int j = k; j < N - 1; j++)
a[i][j] = a[i][j + 1];
#define N1 N - 1 //новый размер
for (i = 0; i < N1; i++) {
for (int j = 0; j < N1; j++) {
printf("%3d ", a[i][j]);
}
printf("\n\n");
}