You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++读取字谜网格文本文件为二维数组并匹配字典单词的问题求解

解决字谜网格匹配问题的思路和实现步骤

没问题,我来帮你梳理下解决这个字谜匹配问题的完整思路和具体实现步骤,用Python来举例的话,大概是这样的:

1. 读取字谜网格为二维数组

首先看你的wordsearch_grid.txt,第一行是网格的行数(这里是9),后面每行是空格分隔的字母。我们可以写个函数把它转成二维数组:

def read_wordsearch_grid(file_path):
    with open(file_path, 'r') as f:
        # 先读取所有非空行,避免空行干扰
        lines = [line.strip() for line in f if line.strip()]
        # 第一行是网格大小
        grid_size = int(lines[0])
        grid = []
        # 读取后面对应行数的内容,每行分割成字母列表
        for line in lines[1:grid_size+1]:
            row = line.split()
            grid.append(row)
    return grid

这个函数会把文件内容转换成类似[['E','M','M',...], ['C','L','U',...], ...]的二维列表,方便后续操作。

2. 读取字典文件

你的dictionary.txt是空格分隔的单词列表,为了提高查找效率,我们把它转成集合(集合的成员检查速度比列表快很多):

def read_dictionary(file_path):
    with open(file_path, 'r') as f:
        content = f.read().strip()
        # 按空格分割单词,转成集合
        words = set(content.split())
    return words

3. 实现单词匹配逻辑

字谜里的单词可能有8个方向:水平左右、垂直上下、两条对角线的四个方向。我们需要遍历每个单元格,然后往每个方向延伸,收集字符组成单词,检查是否在字典里:

首先定义8个方向的向量:

# 8个方向:右、左、下、上、右下、左下、右上、左上
directions = [(0, 1), (0, -1), (1, 0), (-1, 0), (1, 1), (1, -1), (-1, 1), (-1, -1)]

然后写匹配函数:

def find_words_in_grid(grid, words):
    found_words = set()
    rows = len(grid)
    cols = len(grid[0]) if rows > 0 else 0
    # 提前计算字典里最长单词的长度,避免无效延伸
    max_word_len = max(len(w) for w in words) if words else 0

    for i in range(rows):
        for j in range(cols):
            # 从当前单元格出发,尝试所有方向
            for dx, dy in directions:
                current_word = []
                x, y = i, j
                # 往当前方向延伸,直到超出网格边界
                while 0 <= x < rows and 0 <= y < cols:
                    current_word.append(grid[x][y])
                    word = ''.join(current_word)
                    # 如果当前单词长度超过最长单词,直接停止延伸
                    if len(word) > max_word_len:
                        break
                    # 如果单词在字典里,加入结果集合
                    if word in words:
                        found_words.add(word)
                    x += dx
                    y += dy
    return found_words

这里做了个小优化:提前算出字典里最长单词的长度,当延伸出来的单词超过这个长度时,就不用继续了,节省时间。

4. 整合运行

把上面的函数拼起来,就能完成整个流程:

if __name__ == "__main__":
    # 读取网格和字典
    grid = read_wordsearch_grid("wordsearch_grid.txt")
    word_set = read_dictionary("dictionary.txt")
    # 查找匹配的单词
    found_words = find_words_in_grid(grid, word_set)
    # 输出结果
    print("在字谜中找到的单词:")
    for word in found_words:
        print(f"- {word}")

比如你的网格里,COMPUTER肯定能被找到,它在第6行(数组索引5)的水平方向上。

如果后续需要优化性能,还可以把字典按单词长度分组,比如把所有长度为5的单词放一起,这样在延伸的时候,当单词长度到5就只检查对应分组的单词,进一步提升效率。

内容的提问来源于stack exchange,提问作者Accœnt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 07:04:41