【问题标题】:Converting a graph structure to a 2d array将图结构转换为二维数组
【发布时间】:2014-10-28 22:18:55
【问题描述】:

我正在研究自动创建龙与地下城风格的地下城,尽管不如您在网络上找到的那么先进。最终我想要一个 N×N 网格,比如用 1 表示墙壁,用 0 表示路径和开放空间,等等。我能够随机生成一个图形结构,它代表地牢的连通性和每个空间的大小。但我想将图形结构转换为所描述的二维数组。只要没有人行横道并且相当紧凑,我对房间和走廊的外观并不挑剔。

我的问题是有没有已知的算法可以做到这一点?

【问题讨论】:

    标签: arrays graph-algorithm


    【解决方案1】:

    简答:

    是的,有已知的算法。

    长答案:

    您正在寻找的算法类型有几个部分。

    Planar Graphs

    您可以嵌入到网格中的图形类型是平面图形。平面图是可以在平面或平面上绘制的图形。你算法的第一步必须是检查你的图形是否是平面的。在上面的链接中,有一些方法可以检查您的图形是否是平面的。如果您的图形是非平面的,则无法在没有交叉点的情况下绘制它。这可能是您的随机生成器的失败。

    Embedding Graphs

    此链接引用了一篇关于在 n × n 矩阵中嵌入图的论文。它不完全符合您的要求,但您可以通过将每个顶点替换为最大的房间 n × n 区域来在嵌入算法后对其进行操作以满足您的需求。现在,考虑到直线的性质,这个算法可能不是最紧凑的,但这让我想到了你对紧凑性的最终要求。

    包装问题

    包装问题有不同的困难。从您的问题的最初声音来看,您的问题属于较难的类别,特别是因为您拥有整个走廊连接,这使得它变得更加困难。这个问题可能是 np-complete/np-hard,没有有效的算法,所以在上述步骤停止可能是最合理的。查看有关包装问题的维基百科,了解您的具体案例,以确定您是否想花时间使其更紧凑。

    【讨论】:

    • 谢谢。最后,我开发了一种反向算法——将二维数组转换为图形,这仍然使我能够做我需要的事情。
    猜你喜欢
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2020-03-26
    • 2012-08-15
    相关资源
    最近更新 更多