C语言——oj刷题——杨氏矩阵

目录

[1. 理解杨氏矩形的特点](#1. 理解杨氏矩形的特点)

[2. 实现杨氏矩形查找算法](#2. 实现杨氏矩形查找算法)

[3. 编写示例代码](#3. 编写示例代码)


当我们谈到杨氏矩形时,我们指的是一种在二维数组中查找目标元素的高效算法。它是由杨氏(Yan Shi)教授提出的,因此得名为杨氏矩形。

杨氏矩形问题的场景是这样的:给定一个有序的二维数组,每一行从左到右递增,每一列从上到下递增。我们需要在这个二维数组中快速查找某个目标元素是否存在。

为了更好地理解和解决这个问题,我们将分为以下几个步骤进行讲解和编码示例:

  1. 理解杨氏矩形的特点
  2. 实现杨氏矩形查找算法
  3. 编写示例代码

1. 理解杨氏矩形的特点

杨氏矩形的特点是每一行从左到右递增,每一列从上到下递增。这意味着我们可以通过比较目标元素和当前元素的值来缩小查找范围。

具体来说,我们可以从矩形的右上角开始查找。如果目标元素比当前元素大,则目标元素必然不在当前元素的同一行,因此可以排除当前元素所在的行;如果目标元素比当前元素小,则目标元素必然不在当前元素的同一列,因此可以排除当前元素所在的列。通过这种方式,我们可以逐步缩小查找范围,直到找到目标元素或查找范围为空。

2. 实现杨氏矩形查找算法

基于上述特点,我们可以设计一个高效的杨氏矩形查找算法,具体步骤如下:

  • 初始化当前元素为矩形的右上角元素
  • 循环执行以下步骤:
    • 如果当前元素等于目标元素,则返回找到目标元素的位置
    • 如果目标元素比当前元素大,则将当前元素下移一行
    • 如果目标元素比当前元素小,则将当前元素左移一列
  • 如果循环结束仍未找到目标元素,则返回未找到的结果

3. 编写示例代码

下面是一个使用C语言编写的示例代码,演示如何实现杨氏矩形查找算法:

cpp 复制代码
#include <stdio.h>
#include <stdbool.h>

bool yangsMatrixSearch(int matrix[3][3], int target) {
    int rows = 3; // 矩阵的行数
    int cols = 3; // 矩阵的列数

    // 初始化当前元素为矩阵的右上角元素
    int row = 0;
    int col = cols - 1;

    // 循环查找
    while (row < rows && col >= 0) {
        if (matrix[row][col] == target) {
            return true; // 找到目标元素
        } else if (matrix[row][col] < target) {
            row++; // 目标元素比当前元素大,下移一行
        } else {
            col--; // 目标元素比当前元素小,左移一列
        }
    }

    return false; // 未找到目标元素
}

int main() {
    int matrix[3][3] = {
        {1, 4, 7},
        {2, 5, 8},
        {3, 6, 9}
    };
    int target = 5;

    bool found = yangsMatrixSearch(matrix, target);

    if (found) {
        printf("目标元素 %d 存在于矩阵中\n", target);
    } else {
        printf("目标元素 %d 不存在于矩阵中\n", target);
    }

    return 0;
}

在上述示例代码中,我们定义了一个**yangsMatrixSearch**函数,该函数接受一个二维数组(矩阵)和目标元素作为参数。函数内部实现了杨氏矩形查找算法。

在**main函数中,我们定义了一个3x3的矩阵和一个目标元素。然后,调用yangsMatrixSearch**函数来查找目标元素是否存在于矩阵中,并根据查找结果打印相应的信息。

希望这篇博客能够帮助你理解杨氏矩形问题,并提供了详细的讲解和代码示例。如果有任何疑问,请随时向我提问。

相关推荐
Aurora_th35 分钟前
树与图的深度优先遍历(dfs的图论中的应用)
c++·算法·深度优先·图论·dfs·树的直径
aqymnkstkw1 小时前
2024年【电气试验】考试题库及电气试验模拟试题
大数据·c语言·人工智能·嵌入式硬件·安全
马剑威(威哥爱编程)2 小时前
除了递归算法,要如何优化实现文件搜索功能
java·开发语言·算法·递归算法·威哥爱编程·memoization
算法萌新——13 小时前
洛谷P2240——贪心算法
算法·贪心算法
湖北二师的咸鱼3 小时前
专题:二叉树递归遍历
算法·深度优先
重生之我要进大厂3 小时前
LeetCode 876
java·开发语言·数据结构·算法·leetcode
Happy鱿鱼4 小时前
C语言-数据结构 有向图拓扑排序TopologicalSort(邻接表存储)
c语言·开发语言·数据结构
KBDYD10104 小时前
C语言--结构体变量和数组的定义、初始化、赋值
c语言·开发语言·数据结构·算法
LWDlwd05254 小时前
shell指令及笔试题
c语言
Crossoads4 小时前
【数据结构】排序算法---桶排序
c语言·开发语言·数据结构·算法·排序算法