我有一个动态输入、正确分配的方阵
double **matrix;
我想从该矩阵中删除“x”行和“x”列,就像这样:
SOURCE MATRIX:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
例如,我想删除第二行/列。输出必须是这样的:
FINAL MATRIX:
1 3 4
9 11 12
13 15 16
我尝试写下并测试许多算法,但没有成功。 我该怎么办?
最佳答案
好吧,要做到这一点,您必须意识到在内存中您的矩阵实际上是一个列表的列表。 这意味着删除列与删除行略有不同:
假设您的语法是matrix[row][column];
void removeColumn(int** matrix, int col){
MATRIX_WIDTH--;
//TODO check for empty matrix etc;
for(int i=0;i<MATRIX_HEIGHT; i++)
{
while(col<MATRIX_WIDTH)
{
//move data to the left
matrix[i][col]=matrix[i][col+1];
col++;
}
matrix[i] = realloc(matrix[i], sizeof(double)*MATRIX_WIDHT);
}
void removeRow(int** matrix, int row){
MATRIX_HEIGHT--;
//TODO check for empty matrix etc.
free(matrix[row]);
while(row<MATRIX_HEIGHT)
{
//move data up
matrix[row] = matrix[row+1];
row++;
}
}
so removeColumn
迭代每一行,并删除相应的项目,而 removeRow
可以释放
该行,并覆盖其指针。
请注意,您必须自己跟踪矩阵大小的大小。在示例中,我使用了 MATRIX_WIDTH
和 MATRIX_HEIGHT
但您必须为此实现一些功能。 (也许是一个具有宽度高度和指针的结构。)
关于c - C中删除方阵中的一列和一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30713185/