如何生成矩阵的所有可能的组合 - Letter Soup游戏

时间:2014-05-23 14:34:20

标签: c

我正在做一个小字母汤游戏,我需要帮助来弄清楚如何做到这一点。

我想构建一个脚本来打印汤可能产生的所有可能的单词。想象一下,我有汤

ABC
DEF

游戏允许用户导航到他所在的字母周围的8个位置。如果用户从字母“B”开始,他可以选择矩阵上的任何其他字母。

用户不能在他访问过的位置上使用过一封信。因此,使用上面的例子,我可以创建ABF这个词,但不能创建ABA这个词。

我的单词是其他单词的前缀。例如,AB是单词,ABC也是单词。

在上面的例子中,我们有一个2x3矩阵但是单词可以有23个字母长度所以我需要找出最大23个字母的单词用于大矩阵。

我甚至不知道从哪里开始...我有代码来查看生成的单词是否有效。我有一个看到这个词是否是一个单词的一部分所以我不会继续检查它是不是......但我无法想象如何在1º字母周围的8个不同位置构建单词...

你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

创建一个node结构,表示矩阵中的位置,其中一个元素为node*[8]node**,表示节点外的可用路径。每个节点都需要char value来告诉您标注的内容。他们还需要int traversed我将在稍后讨论。

Here是对C中图形的讨论,而不是使用邻接矩阵(效率更高一点)。

它们生成的路径基本上是遍历的char value字符串。由于您知道此处只有n * m个唯一路径,因此您可以设置一个不超过char* path个字符的固定大小n * m + 1(最后一个用于{{} 1}},当然)。

在您从每个节点开始构建的图表上执行Depth first search,创建所有可能\0路径的列表。确保在DFS中将您标记的每个节点标记为char*,这样您就不会重复任何节点(当然,如果您点击traversed = 1节点,则只需停止该特定路径)。将所有节点重置为traversed == 1后,将它们重置为非常重要。