分组重叠形状(x,y)

时间:2015-11-23 00:19:46

标签: c++ algorithm equivalence

我使用x-y坐标(左下角,右上角)查找重叠矩形(区域)的算法运行正常。但是我将重叠的组合在一起的算法似乎并没有起作用。有人可以告诉我我做错了吗?

我的程序从.txt文件读取x-y坐标,例如......

0 5 3 6 (0,5 is bottom left corner and 3,6 is top right corner)

2 7 8 9 (2,7 is bottom left corner and 8,9 is top right corner)

然后计算出所有组在重叠矩形上的内容并打印出组。

即。矩形0重叠2,2重叠1,1重叠5.这意味着矩形0,2,1和5都在1组中,这样我就可以打印出#1组。

即。矩形4和3重叠,这意味着矩形4和3在组#2中。

即。矩形10与11重叠,矩形11与矩形12重叠。这意味着矩形10,11和12都在#3组中,这样我就可以整齐地打印出来。

1 个答案:

答案 0 :(得分:1)

据我所知,你需要做的是实现一个union-find数据结构来存储连接的组件。它完全符合您的意图。有关更多说明,请阅读以下问题:Union-find data structure

使用提到的代码,您需要做的是:

UF uf( n ); // create and initialize a UF. n is the number of rectangles you have
if ( two rectangles overlap ){ 
     if ( ! connected( rectangleId1, rectangleId2 ) ){ // if they aren't already in the same component
           merge( find(rectangleId1), find(rectangleId2) ); // put them in the same component
     }
}

之后,find( rectangleId )具有相同值的每个矩形都属于同一个组件。