二维数组中的查找

要求描述:给你一个二维矩阵,每行从左到右递增,每列从上往下递增,给你一个val,让你判断值val是否在该矩阵中出现。

思路:从左下角,或者右上角去判断。如左下角,那么如果左下角的数字比val小,那么说明这一列已经不满足条件(因为从上往下递增),如果左下角的数字比val大,那么说明这一行不满足条件(因为从左往右递增)。

#include <iostream>
#include<bits/stdc++.h>
using namespace std;
class Matrix{
    public:
        Matrix(){}
     //   Matrix(int _r,int _c):r(_r), c(_r) {}
        void input(){
            cin>>r >> c;
            for(int i = 0; i < r; i++){
                for(int j = 0; j < c; j++){
                    cin>>mat[i][j];
                }
            }
            cin>>val;
        }
        bool exist(){
            int cc = c;
            c = 0;
            r--;
            while(r >= 0 && c < cc){
                if(mat[r][c] == val) return true;
                else if(mat[r][c] < val){
                    c++;
                }else if(mat[r][c] > val){
                    r--;
                }
            }
            return false;
        }
        ~Matrix(){}
    private:
        int r, c, val;
        int mat[50][50];
};
int main(){

    Matrix tes;
    tes.input();
    if(tes.exist()){
        cout<<"exist"<<endl;
    }else{
        cout<<"not exist"<<endl;
    }
    return 0;
}


/*
4 4
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
7

*/

  

posted @ 2016-06-20 21:35  tcgoshawk  阅读(180)  评论(0编辑  收藏  举报