c - C中删除方阵中的一列和一行

标签 c matrix

我有一个动态输入、正确分配的方阵

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_WIDTHMATRIX_HEIGHT 但您必须为此实现一些功能。 (也许是一个具有宽度高度和指针的结构。)

关于c - C中删除方阵中的一列和一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30713185/

相关文章:

c++ - 错误 C2109 : subscript requires array or pointer type

Android ZXing图像处理

c - 如何填充、洗牌、发牌游戏

c - "void foo(int q[][4]){}"中的 q 是什么类型?使用 "void foo(int q[6][4]){}"与前者有何不同?

c - 在 C 中通过字符串运行命令

iOS - 使用 Accelerate.framework 计算矩阵每一行和/或列的点积

Haskell - 如何将矩阵(二维数组)分成几组

python - 列表列表的总和;返回总和列表

opengl - OpenGL 对四元数的支持是什么?

java - C、C++ 和 Java 中的不同结果相同的表达式。为什么?