【华为机试】2023年真题B卷(python)-单词搜索-找到它

一、题目

题目描述:

找到它是一个小游戏,你需要在一个矩阵中找到给定的单词。
假设给定单词 HELLOWORD,在矩阵中只要能找到 H->E->L->L->O->W->O->R->L->D连成的单词,就算通过。
注意区分英文字母大小写,并且您只能上下左右行走,不能走回头路。

二、输入输出

输入描述:
输入第 1 行包含两个整数 n、m (0 < n,m < 21) 分别表示 n 行 m 列的矩阵,
第 2 行是长度不超过100的单词 W (在整个矩阵中给定单词 W 只会出现一次),
从第 3 行到第 n+2 行是指包含大小写英文字母的长度为 m 的字符串矩阵。
输出描述:
如果能在矩阵中连成给定的单词,则输出给定单词首字母在矩阵中的位置(第几行 第几列),
否则输出“NO”。

三、示例

示例1  
输入输出示例仅供调试,后台判题数据一般不包含示例
输入:
5 5
HELLOWORLD
CPUCY
EKLQH
CHELL
LROWO
DGRBC
输出:
3 2

四、要求

时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld

五、解题思路

  1. 首先,我们需要遍历矩阵中的每个位置,找到与给定单词的首字母匹配的位置。
  2. 对于每个匹配的位置,我们可以使用深度优先搜索(DFS)来判断是否能够连成给定的单词。
  3. 在DFS过程中,我们需要判断当前位置是否越界,是否已经访问过,以及当前位置的字母是否与给定单词的下一个字母匹配。
  4. 如果能够连成给定的单词,我们输出首字母在矩阵中的位置;否则,输出"NO"。

六、参考代码 

# -*- coding: utf-8 -*-
'''
@File    :   2023-B-单词搜索-找到它.py
@Time    :   2023/12/15 17:13:34
@Author  :   mgc 
@Version :   1.0
@Desc    :   None
'''

def find_word_position(n, m, word, matrix):
    directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]  # 上下左右四个方向的偏移量

    def dfs(row, col, index):
        if index == len(word):  # 已经匹配到给定单词的最后一个字母
            return True

        if row < 0 or row >= n or col < 0 or col >= m:  # 当前位置越界
            return False

        if matrix[row][col] != word[index]:  # 当前位置的字母与给定单词的下一个字母不匹配
            return False

        temp = matrix[row][col]  # 临时保存当前位置的字母
        matrix[row][col] = '#'  # 将当前位置标记为已访问

        for dx, dy in directions:
            if dfs(row + dx, col + dy, index + 1):  # 沿着四个方向继续搜索
                return True

        matrix[row][col] = temp  # 恢复当前位置的字母
        return False

    for i in range(n):
        for j in range(m):
            if matrix[i][j] == word[0]:  # 找到与给定单词首字母匹配的位置
                if dfs(i, j, 0):  # 使用DFS判断是否能够连成给定的单词
                    return f"{i+1} {j+1}"  # 输出首字母在矩阵中的位置

    return "NO"

# 测试样例
n, m = map(int, input().split())
word = input()
matrix = []
for _ in range(n):
    row = list(input())
    matrix.append(row)

result = find_word_position(n, m, word, matrix)
print(result)

猜你喜欢

转载自blog.csdn.net/u014481728/article/details/135021802