【发布时间】:2014-10-28 22:18:55
【问题描述】:
我正在研究自动创建龙与地下城风格的地下城,尽管不如您在网络上找到的那么先进。最终我想要一个 N×N 网格,比如用 1 表示墙壁,用 0 表示路径和开放空间,等等。我能够随机生成一个图形结构,它代表地牢的连通性和每个空间的大小。但我想将图形结构转换为所描述的二维数组。只要没有人行横道并且相当紧凑,我对房间和走廊的外观并不挑剔。
我的问题是有没有已知的算法可以做到这一点?
【问题讨论】:
我正在研究自动创建龙与地下城风格的地下城,尽管不如您在网络上找到的那么先进。最终我想要一个 N×N 网格,比如用 1 表示墙壁,用 0 表示路径和开放空间,等等。我能够随机生成一个图形结构,它代表地牢的连通性和每个空间的大小。但我想将图形结构转换为所描述的二维数组。只要没有人行横道并且相当紧凑,我对房间和走廊的外观并不挑剔。
我的问题是有没有已知的算法可以做到这一点?
【问题讨论】:
是的,有已知的算法。
您正在寻找的算法类型有几个部分。
您可以嵌入到网格中的图形类型是平面图形。平面图是可以在平面或平面上绘制的图形。你算法的第一步必须是检查你的图形是否是平面的。在上面的链接中,有一些方法可以检查您的图形是否是平面的。如果您的图形是非平面的,则无法在没有交叉点的情况下绘制它。这可能是您的随机生成器的失败。
此链接引用了一篇关于在 n × n 矩阵中嵌入图的论文。它不完全符合您的要求,但您可以通过将每个顶点替换为最大的房间 n × n 区域来在嵌入算法后对其进行操作以满足您的需求。现在,考虑到直线的性质,这个算法可能不是最紧凑的,但这让我想到了你对紧凑性的最终要求。
包装问题有不同的困难。从您的问题的最初声音来看,您的问题属于较难的类别,特别是因为您拥有整个走廊连接,这使得它变得更加困难。这个问题可能是 np-complete/np-hard,没有有效的算法,所以在上述步骤停止可能是最合理的。查看有关包装问题的维基百科,了解您的具体案例,以确定您是否想花时间使其更紧凑。
【讨论】: