我正在研究自动地下城和龙风格的地下城创作,虽然不像你在网上找到的那样先进。最终我想要一个N乘N网格,比如1代表示路径和开放空间的墙0,依此类推。我能够随机生成一个图形结构,它代表地牢的连通性和每个空间的大小。但我想将图形结构转换为如上所述的二维数组。我不挑剔房间和走廊如何出现,只要没有交叉口,而且它相当紧凑。
我的问题是有没有已知的算法来做到这一点?
答案 0 :(得分:1)
是的,有已知的算法。
他们正在寻找的算法类型有几个部分。
可以嵌入网格的图形类型是平面图。平面图是可以在平面或平面上绘制的图。算法的第一步必须是检查图表是否为平面。在上面的链接中有一些方法可以检查图表是否是平面的。如果图形是非平面的,则无法在没有交叉点的情况下绘制它。这可能是随机发生器的垮台。
此链接引用了一篇关于在n×n矩阵中嵌入图形的论文。它与您的请求不完全匹配,但您可以通过将每个顶点替换为n个区域的最大房间来满足您的需求,从而操作后嵌入算法。现在这个算法可能不是最紧凑的,因为它的直线性质,但这导致我的紧凑性的最终要求。
包装问题有各种困难。从你问题的最初声音来看,你的问题属于更难的类别,特别是因为你有整个走廊联系让它变得更加困难。这个问题可能是np-complete / np-hard而没有有效的算法,因此在上述步骤停止可能是最合理的。查看包装问题的维基百科以查看您的具体案例,以确定您是否想花时间使其更紧凑。