行递增、列递增的二维数组中查找

来源:互联网 发布:淘宝返现app 编辑:程序博客网 时间:2024/05/05 16:18


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


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

  杨氏矩阵,简单题目:

  #include

  #include

  /**

  * 有序矩阵查找

  *

  * T = O(n + n)

  *

  */

  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;

  }

0 0