杨氏矩阵 :有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的。编写程序,在这样的数组中查找一个数字是否存在
程序代码如下:
#include <stdio.h>
#define ROW 3
#define COL 4
int Find(int arr[ROW][COL], int *row, int *col, int n)
{
*row = 0;
*col = COL - 1;
while ((*row < ROW) && (*col >= 0))
{
if (arr[*row][*col] > n)
{
(*col)--;
}
else if (arr[*row][*col] < n)
{
(*row)++;
}
else
return 1;
}
return 0;
}
int main()
{
int arr[ROW][COL] = {{1,2,3,4},{5,7,9,10},{21,37,46,98}};
int input = 0;
int row = 0;
int col = 0;
printf("请输入一个整数:");
scanf("%d", &input);
int ret = Find(arr, &row, &col, input);
if (ret == 1)
{
printf("row = %d,col = %d\n",row,col);
}
else
{
printf("Not found\n");
}
return 0;
}
程序运行结果如下:

本文介绍了一种在杨氏矩阵中查找特定数字的算法。杨氏矩阵是一种特殊的二维数组,其特点是每一行从左到右递增,每一列从上到下递增。通过巧妙地利用这一特性,算法能够在O(m+n)的时间复杂度内找到目标数字。
584

被折叠的 条评论
为什么被折叠?



