单独区域算法

时间:2015-04-03 22:27:17

标签: algorithm geometry

我们给出一个N×M矩形区域,其中有K行。每一行都有(x0,y0) - (x1,y1),开始和结束坐标。是否有一些众所周知的算法或资源可以帮助我编写一个程序来查找这些线在矩形区域中形成多少个单独的区域?

如果这是原始的矩形区域:http://prntscr.com/6p9m2c 然后有4个独立的区域:http://prntscr.com/6p9mo5

2 个答案:

答案 0 :(得分:1)

所有带有交叉点的段都形成planar graph。您必须彻底计算此图的顶点和边,然后应用Euler's formula

 F = E - V + 2

其中
V是顶点计数 - 交叉点的数量(以及角和自由段末端)
E是边数 - 在交叉点之后形成的段数 F是刻面的数量 您需要的区域数是

R = F - 1

因为F考虑了外部方面。

对于您的示例 - 有16个顶点,10个水平边和9个垂直,所以

R = 10 + 9 - 16 + 2 - 1 = 4

请注意,您可以使用度数1,2(角点和自由端)计算顶点,也可以将它们与一个相邻段一起忽略(简化图形) - 这不会影响结果。

答案 1 :(得分:0)

想象一下,NxM网格是每个'。'的图形。是一个顶点,如果它们是并排的(上方,下方,侧面),则两个顶点通过边连接。现在,每个单独的区域对应于图形的连接组件,您可以使用BFS或DFS算法计算O(N * M)中连接组件的数量。