提取随机填充的填字游戏表中的所有单词

时间:2018-06-22 05:04:56

标签: c# unity3d

在填字游戏表中,假设它是用于移动设备的,并且与常规填字游戏不同,您可以在8个笔直的方向上找到单词,是否有标准算法可基于字典查找所有单词?

在我的桌子上,只要您在屏幕上连续手势(移动是连续的,并且不会从屏幕上释放触摸),就可以在各个方向上滑动字母来构建单词回到最后一步的感动词。

有一个类似的应用Wordament。在Wordament应用程序中,它从关卡开始就知道所有可能的单词,并向您显示隐藏的单词。如果我开始遍历所有2个字母的单词,然后与触摸的字母进行比较,然后例如在5x5表格中列出1000个2个字母的单词,则总迭代次数约为145k。假设我们有2个字母到15个字母的单词。

要列出所有可能的单词,首先我从第一个单元格开始(我已经创建了一个2d char数组来存储字母),如果字典的第一个单词的第一个字母等于该单元格,那么我将移至第一个单词的下一个字符字典并移动到数组中的下一个单元格,并针对数组中的所有字母对字典第一个单词的所有字符执行此操作。这种方法甚至正确吗? 有没有一种有效的方法来猜测随机填充字符表中的所有可能单词?

预先感谢

1 个答案:

答案 0 :(得分:0)

我个人对单词的快速查找将是一棵字符树。快速而最小的内存占用,但必须预先加载(或以某种方式将其预先填充序列化)

class CharTree {

    public class TreeNode {
        public bool HasChildren { get { return Children.Count > 0; } }

        public Dictionary<char, TreeNode> Children = new Dictionary<char, TreeNode>();

        public TreeNode this[char idx] {
            get { return Children[idx]; }
            set { Children[idx] = value; }
        }
    }

    protected TreeNode Root;

    public void AddChars(string line) {

        if (Root == null) Root = new TreeNode();

        var currentNode = Root;

        foreach(var letter in line) {
            if (!currentNode.Children.ContainsKey(letter))
                currentNode.Children.Add(letter, new TreeNode());
        }
    }

    public string Validate( string line ) {


        var currentNode = Root;

        if (currentNode == null) return null;

        var result = "";

        foreach ( var letter in line ) {
            currentNode = currentNode[letter];

            if (currentNode == null) break;

            result += letter;
        }

        return result;
    }
}

如何构建“线”由您决定。您仍然必须使用玩家所遵循的任何规则来迭代2D数组。