每一行递增,每一列递增的矩阵的查找:

一个m*n的矩阵,从左到右从上到下都是递增的,给一个数elem,求是否在矩阵中,给出思路和代码

  杨氏矩阵,简单题目:

 

#include
  #include
  /**
  * 有序矩阵查找
  *
  * T = O(n + m)
  *
  */
  void findKey(int **matrix, int n, int m, int key)
  {
  int row, col;
  for (row = 0, col = m - 1; row < n && col >= 0;) {
/*
对于某一行而言,从后往前找;
整体初始位置为,第一行的最后一列;
即初始是左上角,然后不断和要查找的值进行比较,看是往下,还是往左移动;
*/
  if (matrix[row][col] == key) {
  printf("第%d行,第%d列\n", row + 1, col + 1);
  break;
  } else if (matrix[row][col] > key) {
  col -= 1;
  } else {
  row += 1;
  }
  }
  printf("不存在!\n");
  }
  int main(void)
  {
  int i, j, key, n, m, **matrix;
  // 构造矩阵
  scanf("%d %d", &n, &m);
  matrix = (int **)malloc(sizeof(int *) * n);
  for (i = 0; i < n; i ++)
  matrix[i] = (int *)malloc(sizeof(int) * m);
  for (i = 0; i < n; i ++) {
  for (j = 0; j < m; j ++)
  scanf("%d", &matrix[i][j]);
  }
  // 查询数据
  while (scanf("%d", &key) != EOF) {
  findKey(matrix, n, m, key);
  }
  return 0;
  }