目前我正在研究最小走廊长度算法,部分设置涉及提出问题中所有相邻点的列表。目前我有两个数组:一个用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相邻列表将具有{v1,v2,... v6,v7 ... v11,v12},我的算法将检测v6和v7作为相邻点。 怎么能检测到这两点之间有空间?请注意,我有一组矩形和顶点上的点也可供我使用。 提前谢谢。
答案 0 :(得分:2)
我建议放弃基于位置的方法,因为无法确定最后一个示例中的v6和v7是否仅基于其位置而相邻(即连接)。相反,创建一个graph,指示哪些点与哪些其他点连接:点将是图形的顶点,并在相邻/连接的每对顶点之间添加边。
要构建图形,您可以尝试这种算法(就在我的脑海中):
然后重复步骤2-5,切换x和y坐标(并使用水平边缘而不是垂直边缘)。
当然,这依赖于所有边(线)都是水平或垂直的假设。