查询以更新的矩阵中连接的非空单元格的数量

查询以更新的矩阵中连接的非空单元格的数量

矩阵可以被认为是按行和列组织的单元格的集合。每个单元格可以包含一个值,该值可以为空或非空。在计算机编程中,矩阵通常用于表示二维网格中的数据。

在本文中,我们将讨论如何有效地计算矩阵中连接的非空单元格的数量,同时考虑到矩阵可能的更新。我们将探索解决此问题的不同方法,并提供真实的代码示例来演示实现。

语法

使用 C/C++ 查询矩阵中连接的非空单元格数量并进行更新的基本语法可以定义如下 –

int queryCount(int matrix[][MAX_COLS], int rows, int cols);

其中matrix是输入的“矩阵”,“rows”和“cols”分别表示矩阵中的行数和列数。函数“queryCount”返回一个整数值,表示矩阵中连接的非空单元格的数量。

算法

为了解决这个问题,我们可以遵循以下算法 –

第 1 步 – 将变量“count”初始化为 0,这将存储连接的非空单元格的计数。

第 2 步 – 迭代矩阵中的每个单元格。

步骤 3 – 对于每个单元格,检查它是否非空(即包含非空值)。

第 4 步 – 如果单元格非空,则将“计数”增加 1。

步骤 5 – 检查单元格是否有任何非空的相邻单元格。

第 6 步 – 如果相邻单元格非空,则将“计数”增加 1。

步骤 7 – 对所有相邻单元格重复步骤 5-6。

第 8 步 – 8:迭代矩阵中的所有单元格后,返回“计数”作为最终结果。

方法

方法 1 – 解决此问题的一种常见方法是使用深度优先搜索 (DFS) 算法

方法 2 – 实现查询以查找具有更新的矩阵中连接的非空单元格计数的另一种方法是使用广度优先搜索 (BFS) 算法。

方法 1

在这种方法中,DFS 算法涉及递归遍历矩阵并跟踪访问过的单元以避免重复计数。

示例 1

此方法在二维矩阵上执行深度优先搜索。矩阵的维数、单元格值和查询次数都是随机确定的。 countConnectedCells 子例程执行 DFS 并返回互连的非空单元格的计数,从位于指定行和列的单元格开始。 updateCell 函数更新矩阵中单元格的值。主函数使用当前时间启动随机种子,然后生成随机矩阵大小和元素,然后是随机数量的查询。对于每个查询,代码随机选择计数查询 (1) 或更新查询 (2) 并执行相应的操作。如果查询的类型为 1,则调用 countConnectedCells 函数来确定互连的非空单元格的计数并打印结果。如果查询类型为2,则调用updateCell函数调整指定单元格的值。

#include using namespace std;const int MAX_SIZE = 100; // Maximum size of the matrix// Function to count connected non-empty cells using DFSint countConnectedCells(int matrix[][MAX_SIZE], int rows, int cols, int row, int col, int visited[][MAX_SIZE]) {   if (row = rows || col = cols || matrix[row][col] == 0 || visited[row][col])      return 0;   visited[row][col] = 1;   int count = 1; // Counting the current cell as non-empty   count += countConnectedCells(matrix, rows, cols, row - 1, col, visited); // Check top cell   count += countConnectedCells(matrix, rows, cols, row + 1, col, visited); // Check bottom cell   count += countConnectedCells(matrix, rows, cols, row, col - 1, visited); // Check left cell   count += countConnectedCells(matrix, rows, cols, row, col + 1, visited); // Check right cell   return count;}// Function to update a cell in the matrixvoid updateCell(int matrix[][MAX_SIZE], int rows, int cols, int row, int col, int newValue) {   matrix[row][col] = newValue;}// Function to initialize the matrixvoid initializeMatrix(int matrix[][MAX_SIZE], int rows, int cols) {   for (int i = 0; i <rows; i++) {      for (int j = 0; j > matrix[i][j]; // Taking input for each cell in the matrix      }   }}int main() {   int rows, cols; // Input matrix size   cin >> rows >> cols; // Taking input for matrix size   int matrix[MAX_SIZE][MAX_SIZE]; // Matrix to store the values   int visited[MAX_SIZE][MAX_SIZE] = {0}; // Visited matrix to keep track of visited cells   initializeMatrix(matrix, rows, cols); // Initialize the matrix with input values   int queries; // Input number of queries   cin >> queries; // Taking input for number of queries   for (int i = 0; i > queryType; // Taking input for query type      if (queryType == 1) {         int row, col; // Input row and column for count query         cin >> row >> col; // Taking input for row and column         int count = countConnectedCells(matrix, rows, cols, row, col, visited); // Call countConnectedCells function         cout << "Count of connected non-empty cells at (" << row << ", " << col << "): " << count <> row >> col >> newValue; // Taking input for row, column, and new value         updateCell(matrix, rows, cols, row, col, newValue); // Call updateCell function      }   }   return 0;}

输出

Count of connected non-empty cells at (1, 2): 0Count of connected non-empty cells at (0, 1): 2

方法2

在这种方法中,广度优先搜索(BFS)是另一种图遍历算法,可用于查找矩阵中连接的非空单元格的数量。在 BFS 中,我们从给定的单元开始,以广度优先的方式(即逐层)探索其所有相邻单元。我们使用队列来跟踪要访问的单元格,并标记已访问的单元格以避免多次计数。

示例 2

该代码构成了一个在二维矩阵上执行广度优先搜索算法的软件。矩阵的维数、单元格值和查询数量是任意生成的。该代码包含两个子例程:一个用于执行 BFS,另一个用于调整矩阵内的单元。

BFS 操作从随机选择的小区开始,并检查其相邻小区以确定它们是否互连且未被占用。如果是这样,它们将被附加到队列中并以类似的方式进行处理。更新矩阵内的单元仅涉及更改其值。生成矩阵和查询数量后,代码随机选择 BFS 查询或更新查询并执行适当的操作。 BFS 查询的结果是从所选单元格开始的互连未占用单元格的计数。

代码

#include #include #include #include using namespace std;const int MAX_SIZE = 100;// Function to perform Breadth-First Search (BFS)int bfs(int matrix[][MAX_SIZE], int rows, int cols, int row, int col, int visited[][MAX_SIZE]) {   int count = 0;   queue<pair> q;   q.push({row, col});   while (!q.empty()) {      pair currentCell = q.front();      q.pop();      int currentRow = currentCell.first;      int currentCol = currentCell.second;      if (currentRow >= 0 && currentRow = 0 && currentCol < cols && !visited[currentRow][currentCol] && matrix[currentRow][currentCol] == 1) {         count++;         visited[currentRow][currentCol] = 1;         q.push({currentRow - 1, currentCol});         q.push({currentRow + 1, currentCol});         q.push({currentRow, currentCol - 1});         q.push({currentRow, currentCol + 1});      }   }   return count;}// Function to update a cell in the matrixvoid updateCell(int matrix[][MAX_SIZE], int row, int col, int newValue) {   matrix[row][col] = newValue;}// Function to generate a random integer between min and max (inclusive)int randomInt(int min, int max) {   return rand() % (max - min + 1) + min;}int main() {   srand(time(0));   int rows = randomInt(1, 10);   int cols = randomInt(1, 10);   int matrix[MAX_SIZE][MAX_SIZE];   int visited[MAX_SIZE][MAX_SIZE] = {0};   for (int i = 0; i < rows; i++) {      for (int j = 0; j < cols; j++) {         matrix[i][j] = randomInt(0, 1);      }   }   int queries = randomInt(1, 5);   for (int i = 0; i < queries; i++) {      int queryType = randomInt(1, 2);      if (queryType == 1) {         int row = randomInt(0, rows - 1);         int col = randomInt(0, cols - 1);         int count = bfs(matrix, rows, cols, row, col, visited);         cout << "Count of connected non-empty cells at (" << row << ", " << col << "): " << count << endl;      } else if (queryType == 2) {         int row = randomInt(0, rows - 1);         int col = randomInt(0, cols - 1);         int newValue = randomInt(0, 1);         updateCell(matrix, row, col, newValue);      }   }   return 0;}

输出

Count of connected non-empty cells at (0, 0): 0

结论

在本文中,我们讨论了两种使用 C/C++ 查找矩阵中连接的非空单元格数量并进行更新的方法。深度优先搜索(DFS)算法和并集查找(不相交集并集)。在为特定用例选择最合适的方法之前,分析每种方法的时间复杂度和空间复杂度非常重要。

以上就是查询以更新的矩阵中连接的非空单元格的数量的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444836.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:56:03
下一篇 2025年12月11日 23:07:45

相关推荐

  • 使用C++编写,在矩阵中找到给定和的一对数字

    在本文中,我们将讨论在给定矩阵中查找具有给定和的对的程序。例如 – Input : matrix[n][m] = { { 4, 6, 4, 65 }, { 56, 1, 12, 32 }, { 4, 5, 6, 44 }, { 13, 9, 11, 25 } }, SUM = 20Out…

    2025年12月17日
    000
  • 打印矩阵的对角线模式

    给定一个 n*n 的二维数组,任务是找到给定矩阵的反螺旋排列 Input : arr[4][4]={1,2,3,4, 5,6,7,8, 9,10,11,12 13,14,15,16}Output : 1 6 11 16 4 7 10 13 算法 STARTStep 1 -> declare s…

    2025年12月17日
    000
  • C++程序计算矩阵对角线之和

    The utilization of 2-dimensional arrays or matrices is extremely advantageous for severalapplications. Matrix rows and columns are used to hold number…

    2025年12月17日
    000
  • 使用C++找到遍历N叉树的方式的数量

    给定一个n叉树,我们的任务是找到遍历这棵树的总方式数,例如 − 对于上面的树,我们的输出将是192。 对于这个问题,我们需要一些组合学的知识。现在在这个问题中,我们只需要检查每条路径的所有可能组合,这将给我们答案。 找到解决方案的方法 在这个方法中,我们只需要执行一次层次遍历,检查每个节点有多少个子…

    2025年12月17日
    000
  • 查询字符串A中是否存在字符串B作为子字符串

    介绍 In this tutorial, we will see queries to check if string B exists as a substring of string A. A substring is a string that is part of the main stri…

    2025年12月17日
    000
  • 使用C++编写的查询在范围内具有第K位设置的数组元素数量的代码

    在本文中,我们将讨论一个问题,即找到给定范围内具有第k位设置的元素的数量,例如 − Input : arr[] = { 4, 5, 7, 2 }Query 1: L = 2, R = 4, K = 4Query 2: L = 3, R = 5, K = 1Output : 0 1 我们将通过一种蛮力…

    2025年12月17日
    000
  • 使用C++编写代码,找到具有K个逆序对的排列数量

    在数组中,如果 a[i] > a[j] 且 i 排列以完美的 K 反转结束。这是例子 – Input: N = 4, K = 1Output: 3Explanation: Permutation of the first N numbers in total : 1234, 124…

    2025年12月17日
    000
  • 最多可以购买的糖果数量

    我们得到了一个糖果[]数组,长度存储在“size”中。每个元素 candies[i] 都有一个 i 类型糖果的编号。目标是用任意金额购买尽可能多的糖果。条件如下 – 如果您购买类型 i 的 X[i] (0 X(j) X(j)=0,没有购买j类型的糖果 我们通过例子来理解。 输入 &#82…

    2025年12月17日
    000
  • 一个矩阵概率问题?

    这里我们将看到一个矩阵概率问题。我们有一个矩形矩阵。我们可以以相同的概率从当前单元格移动四个方向。这四个方向是左、右、上、下。我们要计算从位置M[i,j]开始N次移动后的概率。 这里我们要做一些与DFS相关的事情。我们将从当前房间开始递归遍历四个可能的房间。然后我们就计算少走一步的概率。由于四个方向…

    2025年12月17日
    000
  • 使用pthread在C/C++中实现矩阵的加法和减法

    这里我们将看到如何使用多线程环境执行矩阵加法和减法。 pthread用于在C或C++中同时执行多个线程。 有两个矩阵A和B。每个矩阵的阶数为(m x n)。每个线程将获取每一行,并执行加法或减法。因此,对于 m 行,有 m 个不同的线程。 示例 #include#include #include #…

    2025年12月17日
    000
  • 使用C++,将以下内容翻译为中文:在给定数组的索引范围内进行按位与的查询

    在本文中,我们给出了一个问题,其中给定一个整数数组,我们的任务是找到给定范围的按位与,例如 7minus; Input: arr[ ] = {1, 3, 1, 2, 32, 3, 3, 4, 4}, q[ ] = {{0, 1}, {3, 5}}Output:10 01 AND 31 = 123 A…

    2025年12月17日
    000
  • 满二叉树的数量,其中每个节点都是其子节点的乘积

    满二叉树是一种特殊类型的二叉树,其中所有父节点要么有两个子节点,要么没有子节点。在数据结构中,这些类型的树被认为是平衡且有组织的表示。完整二叉树可能具有独特的特征,其中每个父节点都是其子节点的产物。 在本文中,我们将讨论使用 C++ 计算完整二叉树数量的不同方法,以便每个节点都是其子节点的乘积。 输…

    2025年12月17日
    000
  • 检查给定的二进制矩阵中是否存在连续的T个0的块

    简介 二元矩阵广泛应用于计算机科学和各个领域,以有效地表示数据或解决复杂问题。在某些情况下,识别给定的二进制矩阵是否包含连续的零块变得很重要。在本文中,我们将使用 C++ 代码探索一种优雅的解决方案,该解决方案允许我们检测给定二进制矩阵中是否存在 T 个连续的零块。这种方法既直观又高效,适合实际实施…

    2025年12月17日
    000
  • 如何高效地连接多个字符串?

    答案是使用StringBuilder或join等方法可高效拼接字符串。Python推荐str.join(),Java和C#使用StringBuilder,JavaScript推荐Array.prototype.join()或模板字面量,核心是减少内存分配与对象创建,同时需权衡可读性、数据量、线程安全…

    2025年12月14日
    000
  • Numpy入门指南:矩阵逆的计算步骤简介

    Numpy入门指南:矩阵逆的计算步骤简介 概述:矩阵逆是数学中非常重要的操作,可以用来解决线性方程组和矩阵运算中的一些问题。在数据分析和机器学习中,矩阵逆也经常被用来进行特征值分析、最小二乘法估计、主成分分析等等。在Numpy这个强大的数值计算库中,计算矩阵逆非常简单。本文将简要介绍使用Numpy计…

    2025年12月13日
    000
  • numpy如何求矩阵的逆

    numpy求矩阵的逆的步骤:1、导入numpy库,import numpy as np;2、创建一个方阵矩阵,A = np.array([[1, 2], [3, 4]]);3、使用np.linalg.inv()函数求矩阵的逆,A_inv = np.linalg.inv(A);4、输出结果,print…

    2025年12月13日
    000
  • PHP之ThinkPHP有几种查询?

    ThinkPHP有5种核心查询方式:1.基础链式查询,2.原生SQL查询,3.视图查询,4.关联查询(含预加载),5.查询作用域;其中链式+关联+作用域覆盖90%以上需求。 ThinkPHP 的查询方式主要围绕模型(Model)和查询构建器(Query Builder)展开,常见且实用的有 5 种核…

    2025年12月13日
    000
  • win10音响有杂音电流声怎么解决 win10电脑音响有电流声杂音的消除方法

    1、运行音频疑难解答可自动修复常见问题;2、关闭音频增强功能避免失真;3、更新或重装驱动解决兼容性问题;4、禁用电源管理中的节能设置防止供电中断;5、调整采样率为CD或DVD音质稳定输出;6、检查连接线与电磁干扰源,确保信号纯净。 如果您在使用Windows 10电脑时发现音响出现持续的“滋滋”电流…

    2025年12月3日 系统教程
    000
  • 《坦克世界》1.25版本更新,诺曼底PvE模式开启

    最近,《坦克世界》发布了1.25%ignore_a_1%更新,该版本的主题为纪念诺曼底行动80周年,全新的单人剧情pve玩法将带领玩家重回硝烟弥漫的奥马哈海滩,身临其境体验著名的诺曼底登陆。此外,全新成就系统已加入游戏,激烈的前线模式战斗也将于近期回归。 诺曼底行动PvE模式将在6月6日至7月4日持…

    2025年12月3日 行业动态
    000
  • Composer更新太慢怎么办

    更换国内镜像源是解决Composer更新慢的有效方法,如阿里云或Laravel China镜像,可大幅提升下载速度;配合DNS优化、网络检查、禁用TLS、启用并行下载及清除缓存等配置调整,进一步提升性能;团队可搭建私有镜像实现内网高速分发。 Composer 更新慢是不少 PHP 开发者常遇到的问题…

    2025年12月3日
    000

发表回复

登录后才能评论
关注微信