在具有最小列数的矩阵中查找前导元素

时间:2019-01-02 14:53:26

标签: c pointers matrix

我需要找到最小列中的第一个前导元素(行中的第一个数字与0不同)。

例如,在矩阵{(0, 2, 2), (2, 3, 5), (0, 2, 5)}中,前导元素为2:第二行,第一列。

在矩阵{(0, 0, 6), (0, 0, 5), (0, 0, 2)}中,前导元素为6。

bool find_leading_elements(double a[][M], int n, int m, int *row, int *column) {
    int i, j, first_j = 0, count = 0;

    for (i = 0; i < n; i++) {
        for (j = 0; j < m; j++) {
            if (a[i][j] != 0)
                first_j = min(first_j, j);
            else 
                count++;
        }
    }

    if (count == n * m)
        return false;
    else {
        *row = i;
        *column = first_j;
        return true;
    }
}

我写了这段代码,正确地给了我最小的列,但是我不确定如何获得正确的行。你有什么建议吗?

注意:min(first_j, j)min只是一个函数,每当我找到一个不为零的位置时,它就会为我提供最小的列。

1 个答案:

答案 0 :(得分:0)

double a[][M]行应为int (*a)[3]

您可以检查a[0][0]a[1][0]a[2][0]a[0][1],.....中的每个元素,直到a[i][j] != 0或结束为止

以下code可以工作:

#include <stdio.h>
#include <stdbool.h>

bool find_leading_elements(int (*a)[3], int n, int m, int* row, int* col) {
  for (int j = 0; j != m; ++j)
    for (int i = 0; i != n; ++i)
      if (a[i][j] != 0) {
        *row = i;
        *col = j;
        return true;
      }
  return false;
}

int main() {
  int a[3][3] = {
    {0, 2, 2},
    {2, 3, 5},
    {0, 2, 5}
  };
  int row;
  int col;
  if (find_leading_elements(a, 3, 3, &row, &col))
    printf("row= %d col = %d \n", row, col);
  else
    printf("No answer\n");
  return 0;
}