当前位置: 首页 > 知识库问答 >
问题:

怎么统计每组有效方格数?

宁飞宇
2023-03-14

编辑:我有一个逻辑错误,我不知道如何修复它。这是我的密码。我认为问题出在第245行的while函数中。它没有向队列添加下一个有效像素,因此队列变为0,并退出while函数

我需要一个老兵的帮助!我有一个类似国际象棋桌子的东西,有大小相等的方块,从下到上,从右到左编号,但只有一部分对我有效(如我发布链接的图片所示)。我从表中删除了无效的。

我希望我的C程序计算每组中的正方形。正如您在图像中看到的,有效组仅具有直接连接的正方形,而仅对角线连接的正方形不在同一组中。我用颜色来证明我的照片中的有效组。

我知道表格的宽度和高度,我知道它有多少个正方形和有效的正方形。我把它们的数字存储在一个向量中,但是我不知道如何计算每组中的正方形。我该怎么做呢?

这是我的照片:

我想找出一种适用于较大“棋盘”的方法,如已知大小的图片。

共有3个答案

祁奇略
2023-03-14

您正在搜索一种称为连接组件的东西。

这篇文章对这个主题有一些启发,但Web上有许多不同的实现。

何乐
2023-03-14

应将每个连接的正方形分类为单个组件,并计算每个组件的大小。为此,您可以使用嵌套数据结构(如 vector)来存储连接的正方形,并将其嵌套在地图中以区分其他连接的正方形。喜欢

map<int squareIndex, vector<squares> >

基本思想是有一个< code>visited数组,这样你就可以忽略已经访问过的方块。该算法就像在< code >图形中进行< code >广度优先搜索一样。您可以使用< code >队列来存储当前正方形的相邻连接组件。我建议做以下事情。

阿尔戈

    < li >从1到N遍历数组 < li >如果队列为空,则在< code>map中创建新索引,并将元素推入您的< code>map < li >如果visited[element]为真,则转到步骤1,else visited[element]=真,并将元素推送到地图中。 < li>element = dequeue() < li >将当前元素的相邻方块排队,并对当前元素从步骤2开始重复

这样,最终你的< code >地图的大小将为4(对于给定的情况),并且每个地图元素将包含一个相连方块的向量。使用每个向量的size属性来计算每个索引中的方块数。

百里杰
2023-03-14

你肯定会错过的是:一个有效的正方形属于哪个组?
你可以用图论来解决这个问题。但您也可以尝试其他方法。

例如,您可以使用一个标记列表来跟踪已经访问过的节点。您可以使用vector of vector来管理组节点。

  1. 以相同的方向浏览表格,比如从左上角到右下角。仅检查未访问的节点。
  2. 当找到未被访问的有效方块时,将此节点添加到 vector[count] 并将此节点标记为已访问。
  3. 在右下角寻找这个节点连接的正方形。如果找到一个,则将其标记为已访问,并将节点添加到同一个向量[count]列表中。
  4. 重复相同的过程,直到找不到再连接的组件(例如递归)。
  5. 如果在同一组中不再找到连接的正方形,请继续执行步骤 1。
  6. 最后只是每个向量[count]的总和,它应该给出预期的结果(为了提高性能,你可以在查看连接的组件时动态执行此操作)。
 类似资料:
  • 云星空有张单据,A是在表头,B、C、D、E是在表体 名称 项目 时间 A1 B1 2024-08-23 10:00:00 A1 C1 2024-08-23 10:00:00 A1 D1 2024-08-23 10:00:00 A2 B1 2024-08-23 10:00:00 A2 C1 2024-08-23 10:00:00 A2 D1 2024-08-23 10:00:00 A1 B1 202

  • 我想计算区域内的分区统计数据,以符合等宽。 得到区段列表后,想法是分配块号,因为栅格::区段函数需要一个带有表示区段代码的栅格层。 当我尝试用分区编号填充范围时,填充的区域与范围不对应(请参见图)。为什么会这样?

  • 问题内容: 可以说我有一个名为’ ‘的mysql表,具有以下值: 我想生成一份报告,说明每天有多少只动物报名(我不在乎一天中的时间)。因此,我从上面的示例表中寻找的最终结果是: 有没有一种方法可以在mysql中执行此操作,或者我需要使用另一种语言(如PHP)来计算总数吗? 任何想法表示赞赏,谢谢 问题答案: 会给您您所追求的。

  • 问题内容: 由于某种原因,我对此感到困惑。 基本上,我正在寻找一个查询,该查询将查找自2010年以来每月的新客户数量。 我有客户的电子邮件地址(email),所有下达的订单(OrderID)以及下达订单的日期(OrderDate)。该表是tblOrder。 我知道“新客户”是:(a)在日期/月份 之前 从未下过订单的人,以及(b)在日期/月份 之后 至少下过一次订单的人 我希望输出最终是这样的,用

  • 我有一个名为-'users'的示例sql表,其中包含以下记录: 我想获得每一个用户的计数在每日,每周和每月的基础上与预期的outlike为:

  • 统计最开始的主要任务就是描述数据。正如我们在统计概述中提到的,群体的数据可能包含大量的数字,往往让人读起来头昏脑涨。电影《美丽心灵》中,数学家纳什不自觉地沉浸在一串数字中。这样的电影桥段经常让观众感到惭愧。但真相是,每个人的注意力和短期记忆都很有限,只能集中在很少量的信息。数据描述就是要用一定的方法来提取少量信息,从而让人更容易明白数据的含义。数据描述的方法可以分为两大门类,即群体参数和数据绘图。