我有在独自制作一个垃圾小游戏,遇到一个问题,就是在一个2维的非连续地图上根据已有的两个坐标随机生成指定长度的道路。
具体是这样的。假设有一个大小为n x m的相连方块,方块只能是墙或是地板,现在已知两个地板的坐标为(a,b),(c,d),其曼哈顿距离为L = |a-c|+|b-d|,求生成一个只能上下左右移动的长度为L+N(N为大于0的偶数)且没有岔路的连接两个已知地板的连续地板道路。其中没有岔路是指除了已知的两个地板以外,所有生成的地板必然只和两个墙和两个通路相连。

这个问题我倒是可以用编程语言使用递归随机遍历所有可能获得。但是我觉得这不够优雅,想要使用一种数学工具,将这个问题简化,或将其隐含的关系用数学公式表达出来。
我首先想到的就是将求坐标序列的问题转换为求生成的第n个地板对第n-1个地板的偏移序列,这很容易,因为两个初始地板已知,且只能上下左右生成。比如上图示例中,右下角的地板相对左上角的地板向右偏移3格、向下偏移3格,于是就可以得到一个序列(→,→,→,↓,↓,↓),然后将这个序列随机打乱,再根据序列由左上角地板开始生成地板,得到一个随机的长度为L + 0 = 6的连续道路,但是如果我想要生成L+4的道路并往之前的序列里加入(→,↓,↑,↓)四个偏移后并随机打乱,就可能生成图中展示的错误道路。这是因为生成的地板必须满足只和两个地板两个墙相连,而我想出的偏移序列并没有考虑到这一点。
所以我想问问吧里的带佬们有没有什么办法或思路来解决这个问题,除了递归。
当然带佬们也可以直接开喷“自己的程序自己想啊!”,那至少希望可以可怜可怜下我这个菜鸡给我指明一条道路,让我知道哪个方向的数学知识可以解决这个问题,最好给一个相似的经典问题让我参考参考。谢谢谢谢
具体是这样的。假设有一个大小为n x m的相连方块,方块只能是墙或是地板,现在已知两个地板的坐标为(a,b),(c,d),其曼哈顿距离为L = |a-c|+|b-d|,求生成一个只能上下左右移动的长度为L+N(N为大于0的偶数)且没有岔路的连接两个已知地板的连续地板道路。其中没有岔路是指除了已知的两个地板以外,所有生成的地板必然只和两个墙和两个通路相连。

这个问题我倒是可以用编程语言使用递归随机遍历所有可能获得。但是我觉得这不够优雅,想要使用一种数学工具,将这个问题简化,或将其隐含的关系用数学公式表达出来。
我首先想到的就是将求坐标序列的问题转换为求生成的第n个地板对第n-1个地板的偏移序列,这很容易,因为两个初始地板已知,且只能上下左右生成。比如上图示例中,右下角的地板相对左上角的地板向右偏移3格、向下偏移3格,于是就可以得到一个序列(→,→,→,↓,↓,↓),然后将这个序列随机打乱,再根据序列由左上角地板开始生成地板,得到一个随机的长度为L + 0 = 6的连续道路,但是如果我想要生成L+4的道路并往之前的序列里加入(→,↓,↑,↓)四个偏移后并随机打乱,就可能生成图中展示的错误道路。这是因为生成的地板必须满足只和两个地板两个墙相连,而我想出的偏移序列并没有考虑到这一点。
所以我想问问吧里的带佬们有没有什么办法或思路来解决这个问题,除了递归。
当然带佬们也可以直接开喷“自己的程序自己想啊!”,那至少希望可以可怜可怜下我这个菜鸡给我指明一条道路,让我知道哪个方向的数学知识可以解决这个问题,最好给一个相似的经典问题让我参考参考。谢谢谢谢