杨氏矩阵C++实现

何为杨氏矩阵?这个网上的介绍很多,下面给出杨氏矩阵搜索算法:

#include <iostream>
using namespace std;
// 杨氏矩阵查找算法
bool Yang_search(int arr[][4], int N,  int k)
{
    if (k<arr[0][0] || k>arr[N - 1][N- 1])
    {
        cout << "此值必不在此数组内" << endl;
        return false;
    }
    // 从左下角元素查起
    int col = 0;
    int row=N-1;
    while (row>=0&&col<=N-1)
    {
        if (k < arr[row][col])
            row--;
        else if (k > arr[row][col])
            col++;
        else
        {
            cout << "找到此值,在第" << row+1 << "行" << col+1 << "列" << endl;
            return true;
        }
    }
    if (row<0 || col>N - 1)
    {
        cout << "查无此值" << endl;
    }
    return false;
}
int main()
{
    int arry[4][4]= {{ 1,5,7,9 },{ 4,6,10,15 },{ 8,11,12,19 },{ 14,16,18,21 }};
    Yang_search(arry, 4, 15);
    system("pause");
    return 0;
}

比如查找15,结果为:

如果查找13,结果为:

如果查找22,结果为:

结束。

时间: 2024-10-19 21:16:02

杨氏矩阵C++实现的相关文章

杨氏矩阵中查找元素

在杨氏矩阵中查找一个元素是否存在 杨氏矩阵即每一行均以递增顺序排列,每列从上到下也为递增顺序 方法一:数组 #include<stdio.h> #include<stdlib.h> #define COLS 3 #define ROWS 3 //要查找只要在找到右上角的元素和输入元素进行比较.如果右上角元素大,即可排除其他行,若小 //,则可排除本行,继续循环,用输入元素和右上角的元素进行比较 int find(int arr[][COLS], int rows, int cols

杨氏矩阵定义及其查找的实现C++

先介绍一下这个数据结构的定义,Young Tableau有一个m*n的矩阵,然后有一数组 a[k], 其中 k<=m*n ,然后把a[k]中的数填入 m*n 的矩阵中,填充规则为: 1.  每一行每一列都严格单调递增(有其他的版本是递减,其原理相同). 2.  如果将a[k]中的数填完后,矩阵中仍有空间,则填入 ∞. 举例: 这里主要给出杨氏矩阵的定义和查找 方法:理由每一列,没一行都是递增的,我们从左上角开始查找,不断的缩小矩阵的大小,最后只剩一1*1的矩阵. C++代码: 1 #pragma

【c语言】二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

// 二维数组中的查找,杨氏矩阵在一个二维数组中.每行都依照从左到右的递增的顺序排序. // 每列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个数组和一个数.推断数组中是否包括这个数 #include <stdio.h> #define col 4 #define rol 4 int yang(int(*p)[col], int num) { int i = 0; int j = col - 1; while (j+1) { int *q = &(p[i][j]); if

二维数组中的查找,杨氏矩阵

题目: 在一个二维数组中,每行都按照从左到右的递增的顺序排序.每列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个数组和一个数,判断数组中是否包含这个数. 例如: 二维数组 1 2 3 4 5 6 7 8 9 查找数字7. 题目分析: 算法一: 杨氏矩阵中的查找,可以看做是在二维数组中查找,定义一个二维数组,根据数组的基本特点,可以从数组中第一个元素逐行进行遍历,若数组的某个元素与所要找的数字相等,则能够找到这个数字.如果遍历完整个数组,都没有与之相等的元素,则找不到这个数字. 下面

二位数组中的查找——杨氏矩阵

------------------------------------------------------------------------------------------------- "杨氏矩阵":即数组元素从左向右依次递增,从上到下依次递增.要想在该数组中查找数,首 先该数组得满足"杨氏矩阵"的特点.为了方便理解我们可以将一个二位数组看作是一个矩阵,假设i 为行,j为列,数组为str,那么只要满足(str[i][j]<str[i][j+1] &a

杨氏矩阵C语言实现

3X3列表格式, 杨氏矩阵: #include<stdio.h> void check(int arry[][3],int number) {                        int i = 0;              int j = 0;              while(i <= 2 && j <= 2)             {                          if(arry[i][2]<number)     

杨氏矩阵查找实现

杨氏矩阵查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二位数组和一个整数,判断数组中是否含有该整数. C#语言实现: public static bool yangShiFind(int[,] array, int num)         {             if (array == null)                 return false;             int m = array.

【杨氏矩阵+勾长公式】POJ 2279 Mr. Young&#39;s Picture Permutations

Description Mr. Young wishes to take a picture of his class. The students will stand in rows with each row no longer than the row behind it and the left ends of the rows aligned. For instance, 12 students could be arranged in rows (from back to front

【C语言】二维数组中的查找,杨氏矩阵

//二维数组中的查找,杨氏矩阵 //在一个二维数组中,每行都按照从左到右的递增的顺序排序.每列都按照从上到下递增的顺序排序. //请完成一个函数,输入这样的一个数组和一个数,判断数组中是否包含这个数. #include <stdio.h> #define Col 4 int Yang(int arr[][Col], int val) { int i=0; int j = Col - 1; int tmp = arr[i][j]; //找到左上角的数 while (1) { if (tmp ==

杨氏矩阵中的查找

杨氏矩阵 杨氏矩阵中,每行元素是递增的,每列元素也是递增的.即a[i][j]<a[i+1][j]且a[i][j]<a[i][j+1].要在这样的矩阵中查找某个数值元素的位置,复杂度可以达到o(m+n),其中n为矩阵行长度,m为矩阵列长度. 开始我想的是每一行使用二分查找,时间复杂度为O(n * logm) 看到网上使用的定位法,时间复杂度为O(n + m) 首先定位到第一行最后一个元素,如果要查找的数等于这个元素,直接返回true.如果array[i][j]>num,向前寻找,如果arr