目前我正在研究最小走廊长度算法,部分设置涉及列出问题中所有相邻点的列表。目前我有两个数组:一个用 x 坐标上的相邻点排序,另一个用 y 坐标上的点排序。此外,我通过简单地查看给定两个列表的附近点来找到邻接,如果这些点具有相同的 y(在按 x 相邻排序的列表上),那么它们位于同一条线上。同样,如果它们具有相同的 x(在 y 列表上),则位于同一行。
例如,假设我们有以下房间:
然后带有 x 相邻点的列表将具有以下顺序的点:{v1, v2, v3, v4, v5, ... v21, v22}(它们保持与标记相同的顺序)此外,列表与 y 相邻的点将是:{v22, v16, v14, v9, v4, v13, v8, v3, v21, ... v5, v1}(基本上是 y=x 上图形的反映)
如前所述,我通过查看列表中的附近点来找到相邻点。这在大多数情况下都可以正常工作,但是对于以下边缘情况却失败了:
由于 x-adjacent 列表将具有 {v1, v2, ... v6, v7 ... v11, v12} 并且我的算法会将 v6 和 v7 检测为相邻点。如何检测到这两点之间有一个房间?请注意,我也可以使用一组矩形和顶点上的点。提前致谢。