编辑:我有一个逻辑错误,我不知道如何解决它。This is my code。我认为问题出在第245行的while函数中。它没有将下一个有效像素添加到队列中,因此队列变为0并退出WHILE函数。
我需要老兵的帮助!我有一个类似棋桌的东西,大小相等,从下到上,从右到左编号,但只有一些对我有效(如图所示,我发布了一个链接)。我从表中删除了无效的。
我希望我的C程序计算每组中的方块。正如您在图像中看到的那样,有效组仅具有直接连接的正方形,而仅对角连接的正方形不在同一组中。我使用颜色来证明我的照片中的有效群体。
我知道桌子的宽度和高度,我知道它有多少个正方形和有效正方形。 我将他们的数字存储在一个向量中,但我无法弄清楚如何计算每组中的方块。 我怎么能这样做?
这是我的照片:
我想找到一种方法,适用于较大的国际象棋桌和#34;,就像已知尺寸的图片一样。
答案 0 :(得分:0)
你肯定会错过的是:有效广场属于哪个群组?
您可以使用图论来解决这个问题。
但你也可以尝试其他方法。
例如,您可以使用一个标记列表来跟踪已访问过的节点。您可以使用向量向量来管理组节点。
答案 1 :(得分:0)
您应该将每个连接的方块分类为单个组件并计算每个组件的大小。为此,您可以使用嵌套数据结构(例如vector
)来存储连接的正方形并将其嵌套在map
内以区分其他连接的正方形。等,
map<int squareIndex, vector<squares> >
基本思想是拥有一个visited
数组,以便您可以忽略已经访问过的方块。该算法就像在Breadth First Search
中执行Graphs
一样。您可以使用Queue
存储当前方块的相邻连接组件。我建议你做以下几点。
<强> ALGO 强>
map
中创建新索引并将元素推送到map
这样,最终你的map
大小为4(对于给定的情况),每个地图元素将包含连接方块的向量。使用每个向量的大小属性来计算每个索引中的平方数。
答案 2 :(得分:-1)
您正在搜索名为connected component的内容。
This post阐明了这一主题,但网上有一些different implementations。