本文主要是介绍二维矩阵(杨氏矩阵)查找 、定义: 从左到右,从上到下,依次增大的矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
查找某元素
假设矩阵为
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
在里面查找7,如果我们从1开始,则1的右半部分,也就是剩下矩阵的全体,都可能会存在7,这是显然不行的,我们要确定一个确切的查找规则,它沿着特定路线走,最后找到
我们看其规律,如果说要查找的元素比当前元素大,则在其右半部与下半部 如果比当前元素小,则在其左半部与上半部。
而如果我们从右上角开始,9开始,查找7,首先7小于9,所以要在其左半部分与上半部分查找,9的上半部分是没有的,左半部分就是第1 2 3 列,第4列排除掉(注意这个排除掉的意思,意思是说7不可能在这里了)
我们往左走到8,7比8小,同样我们还得往左走,那就是2,
7比2大,所以我们就找右下两部分,右半部分,第3 4 列,我们其实前面已经排除了,只剩下下边的,于是我们从2开始往下走,走到了4
······以此类推
杨氏矩阵难点在于如何选择起始点,以及为什么要选择这个起始点。这一点一定要搞清楚。
我们这里找到大于要寻找的元素,不再为向下还是向右犹豫不决了,我们只需要向下,碰到小于要寻找的元素也是如此。
- #include <iostream>
- #include <algorithm>
- using namespace std;
- int a[4][4]={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
- int k=0;
- bool findElem(int row,int col)
- {
- while((row>=0&&row<4)&&(col>0&&col<4))
- {
- if(a[row][col]=k)
- return true;
- if(a[row][col]<k)
- {
- row++;
- }
- else
- col--;
- }
- return false;
- }
- int main()
- {
- if(findElem(0,3))
- cout<<"find it"<<endl;
- else
- cout<<"could not find it"<<endl;
- return 0;
- }
这篇关于二维矩阵(杨氏矩阵)查找 、定义: 从左到右,从上到下,依次增大的矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!