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

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

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

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

语法

使用 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月17日 21:56:16

相关推荐

  • 更新你的网站:为什么要考虑使用CSS3动画而非仅依赖jQuery?

    更新你的网站:为什么要考虑使用CSS3动画而非仅依赖jQuery? 在现代网页设计中,动画效果已经成为吸引用户注意力和提升用户体验的重要组成部分。而在过去,使用jQuery是实现网页动画的主要方法之一。然而,随着CSS3动画的出现,越来越多的开发者开始选择使用CSS3动画来替代或补充jQuery动画…

    2025年12月24日
    000
  • css如何设置相邻单元格边框之间的距离

    我们先来看下实现效果: (推荐教程:CSS教程) 可以利用 border-spacing 属性来设置相邻单元格的边框间的距离(仅用于“边框分离”模式)。 立即学习“前端免费学习笔记(深入)”; 具体代码: border-collapse: separate;border-spacing: 0px 1…

    2025年12月24日
    000
  • 关于css3中矩阵的使用方法

    这篇文章主要介绍了css3 矩阵的使用详解的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 css3 矩阵变化. 应用格式为: transform: matrix(a,b,c,d,e,f);对应于就是: 实际应用中的转换就是: 立即学习“前端免费学习笔记(深入)…

    2025年12月24日
    000
  • 详解vue.js中$set与数组如何更新

    由于 javascript 的限制,vue 不能检测以下变动的数组:当利用索引直接设置数组的某一项时,例如:vm.items[indexofitem] = newvalue 当你修改数组的长度时,例如:vm.items.length = newLength,不会更新数组。 当然vue中给了解决方法,…

    2025年12月24日
    000
  • 如何使用HTML5创建一个变换矩阵?

    In the following article, we are going to learn about how to create a transformation matrix with HTML5. HTML5 canvas provides methods that allow modif…

    2025年12月21日
    000
  • 如何在HTML中设置单元格内边距?

    我们使用内联样式属性,在HTML中设置单元格填充。单元格填充是表格的单元格边框与单元格内内容之间的空间。样式属性用于HTML的 标签内,使用CSS属性padding并指定像素值。 Syntax Following is the syntax to set cell padding in HTML. …

    2025年12月21日
    000
  • html如何设置单元格颜色

    在html中,可以使用bgcolor属性设置单元格颜色,只需要在指定td标签中添加“bgcolor=”颜色值””样式即可。bgcolor属性规定文档的背景颜色,元素的背景是元素的总大小,包括填充和边界。 本教程操作环境:windows7系统、CSS3&&HTM…

    好文分享 2025年12月21日
    000
  • HTML怎么设置表格单元格颜色

    HTML中设置表格单元格颜色的方法:1、给td标签设置bgcolor属性,语法;2、使用background-color属性,语法“”。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 1、使用HTML  bgcolor 属性 bgcolor 属…

    2025年12月21日
    000
  • 在html语言中,单元格的标记是什么

    在html语言中,单元格的标记是:“”。“”标签用于定义HTML表格中的标准单元格。HTML表格有两类单元格分别是:表头单元和标准单元。其中标准单元包含数据,由td元素创建。 在html语言中,单元格的标记是: 。 (推荐学习:html教程) 标签介绍: 标签定义 HTML 表格中的标准单元格。 H…

    2025年12月21日
    000
  • html表格合并单元格的方法

    html表格合并单元格的方法 html中,colspan属性是合并列,rowspan属性是合并行,合并行的时候,比如rowspan=”2″,它的下一行tr会少一列;合并列的时候 colspan=”2″,此行的列会少一列。 推荐学习:html教程 代码演…

    2025年12月21日
    000
  • html怎样重定向连接

    这次给大家带来html怎样重定向连接,html重定向连接的注意事项有哪些,下面就是实战案例,一起来看一下。 代码如下: window.location.href=”zcbfH.jsp”;//在本框架中重定向 onclick=”top.mainFrame.location=’/login.jsp'”;…

    好文分享 2025年12月21日
    000
  • 表格单元格td设置宽度无效应该如何解决

    这次给大家带来表格单元格td设置宽度无效应该如何解决,表格单元格td设置宽度无效应该解决的注意事项有哪些,下面就是实战案例,一起来看一下。 在做table页面时,有时对td设置的宽度是无效的,td的宽度始终有内部的内容撑开,可以设置padding,但直接设置width却无效,下面我们来具体看下这个示…

    好文分享 2025年12月21日
    000
  • 回文子字符串查询在C++中

    在本教程中,我们需要解决给定字符串的回文子串查询。解决回文子串查询比解决 C++ 中的常规查询复杂得多。它需要更复杂的代码和逻辑。 在本教程中,我们提供了字符串 str 和 Q 个子字符串 [L…R] 查询,每个查询都有两个值 L 和 R。我们的目标编写一个程序来解决查询以确定 subs…

    2025年12月17日
    000
  • 使用C++编写代码,找到具有奇数和的子数组的数量

    子数组是数组的连续部分。例如,我们考虑一个数组 [5, 6, 7, 8],那么有十个非空子数组,如 (5), (6), (7), (8), (5, 6), (6 ,7)、(7,8)、(5,6,7)、(6,7,8) 和 (5,6,7,8)。 在本指南中,我们将解释在 C++ 中查找所有可能的信息来查找…

    2025年12月17日
    000
  • 按照给定的查询重新排列和更新数组元素

    在这个问题中,我们将对数组元素执行给定的查询。查询包含数组元素的循环左旋转、右旋转和更新。 解决问题的逻辑部分是数组旋转。向左旋转数组的简单方法是将每个元素替换为下一个元素,将最后一个元素替换为第一个元素。 我们可以使用deque数据结构来高效地旋转数组。 问题陈述 – 我们给出了一个包…

    2025年12月17日
    000
  • 在C程序中,以矩阵对角线模式打印数字

    任务是打印一个 n x n 的对角线模式的矩阵。 如果 n 是 3,那么打印一个对角线模式的矩阵如下: 所以输出将会是: 示例 Input: 3Output: 1 2 4 3 5 7 6 8 9Input: 4Output: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 1…

    2025年12月17日
    000
  • 具有相同数量小写字母和大写字母的子字符串数量

    在这个问题中,我们需要计算给定字符串中包含相同数量的小写和大写字符的字符串的总数。解决这个问题的朴素方法是找到所有的子字符串,并计算具有相同数量的小写和大写字符的子字符串的总数。 有效的方法是使用子数组求和问题。我们可以将小写字符视为-1,将大写字符视为+1,我们将学习这两种方法来解决问题。 问题陈…

    2025年12月17日
    000
  • 使用C++编写的矩阵中找到具有最大和的一对的算法

    在本文中,我们将讨论在给定矩阵或二维数组中查找具有最大和的对。例如 Input : matrix[m][n] = { { 3, 5, 2 }, { 2, 6, 47 }, { 1, 64, 66 } }Output : 130Explanation : maximum sum is 130 from…

    2025年12月17日
    000
  • 使用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

发表回复

登录后才能评论
关注微信