杨氏矩阵介绍
杨氏矩阵简单来说就是一个矩阵的数字从左往右数,从上往下数都是递增的,这里我们将用c语言实现在杨氏矩阵中查找指定数字。
杨氏矩阵查找算法c语言代码实现
解决问题的关键就是矩阵右上角数字的应用,要查找的数字如果比右上角数字大,那么那一行都比指定的数字小此行消去,如果指定的数字比右上角的数字小,那么那一列就不用再查找此列消去,重复上述操作,矩阵向内部收缩,下列是代码实现。
//杨氏矩阵
#include <stdio.h>
int FindNum(int arr[3][3], int k, int* p1, int* p2)
{
int x = 0;
int y = *p2-1;
while(x <= *p1-1 && y >= 0)
{
if(arr[x][y] > k)
{
y--;
}
else if(arr[x][y] < k)
{
x++;
} else{
*p1 = x;//得到下标行位置
*p2 = y;//得到下标列位置
return 1;
}
}
return 0;
}
int main()
{
int arr[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
int k = 7;
int x = 3;
int y = 3;
int ret = FindNum(arr, k, &x, &y);
if(ret == 1)
{
printf("找到了\n");
printf("下标是:%d %d\n", x , y);
} else{
printf("找不到");
}
return 0;
}