连接导线-算法



我正在使用c#,但将来我可能需要在其他语言上使用它。

许多游戏都有这样的谜题。有一组电线(有两种电线:直的和弯的),有一个信号来自的地方,也有一个信号必须离开的地方。但电线的排列不允许这种情况发生。你必须转动一些电线,以便为信号创建一条路径。

是啊,我想再去找一次美洲大陆,这样以后就不用再去找了。

在将来的某个时候,我也会尝试同样的事情,但这次是用电线将信号分成2或3个信号。

问题是,我想不出一个算法,我可以想象如何把它变成一个代码。我已经想了一段时间,但我想不出什么好东西。

那么,你能帮我吗?我将能够理解算法为"程序必须做什么",但我基本上需要帮助理解算法为"如何编写代码"。

谢谢!

看看一些迷宫生成算法——它们做的事情与您正在寻找的相同,因此是创建网格所需的。从我链接到的网站中选择一个简单的"细胞雕刻器";随机旋转所有的线件,等一下!

对你的问题的评论指出,将算法转化为代码需要将其一点一点地分解——所以这就是我们要做的:

你可以从潜在电线位置的网格开始(可能是2D,但3D游戏会很棒)。

为了创造一个可解决的关卡,你可以做两件事——创造一个关卡,然后看看它是否可解决(糟糕),或者创造一个已解决的关卡,然后"不解决"它(更好)。正如我在上面提到的,制作一个已解决的关卡涉及到与迷宫生成非常相似的算法——一个已解决的关卡会有许多可穿越的"路径",就像迷宫一样。解关卡只需要循环所有的线段,并旋转它们一点。

但是迷宫生成呢?我链接到的资源包含一些算法,这些算法将非常适合您的使用——一个简单的随机DFS应该足以满足您的需求。

你会注意到,我已经讨论了涉及分支线的一般情况——事实上,排除分支意味着你必须做更多的编码,以智能地"修剪"分支——也就是说,当你的一条真正的路径卡住时,比如在角落里,因为随机移动可能是制作有趣关卡所必需的。

你还应该注意到,如果我理解正确的话,这种游戏的解决方案将需要使用所有给定的电线(我知道一些这样的游戏)。否则,考虑到上述生成策略,游戏可能会简单得多。

联合查找算法(回答我的问题)在这个PDF文件中解释:http://www.cs.princeton.edu/~rs/AlgsDS07/01UnionFind.pdf

我想我从来没有想过这个算法,更不用说让它快了。

最新更新