华为OD机试 Python - 找到它

找到它


题目描述

找到它是个小游戏,你需要在一个矩阵中找到给定的单词。假设给定单词HELLOWORLD,在矩阵中只要能找到H->E->L->L->O->W->O->R->L->D连成的单词,就算通过。

注意区分英文字母大小写,并且你只能上下左右行走,不能走回头路。

输入描述

输入第一行包含两个整数n、m(0<n,m<21)分别表示n行m列的矩阵,第二行是长度不超过100的单词W(在整个矩阵中给定单词W只会出现一次),从第3行到第n+2行是只包含大小写英文字母的长度为m的字符串矩阵。

输出描述

如果能在矩阵中连成给定的单词,则输出给定单词首字母在矩阵中的位置(第几行 第几列),否则输出“NO”。

示例1

输入
5 5
HELLOWORLD
CPUCY
EKLQH
CHELL
LROWO
DGRBC
输出
3 2

代码:python

def function():
    line1 = input().split(" ")
    n, m = int(line1[0]), int(line1[1])
    word = input()

    matrix = []
    for i in range(n):
        tmp = []
        line = input()
        for j in range(len(line)):
            tmp.append(line[j])
        matrix.append(tmp)

    for i in range(n):
        for j in range(m):
            flag = search_word(word, 0, matrix, i, j)
            if flag is True:
                print(i + 1, j + 1)
                return

    print("NO")


def search_word(word, index, matrix, row, col):
    if is_valid_pos(row, col, matrix):
        if matrix[row][col] == word[index]:
            matrix[row][col] = "pass"

            if index == len(word) - 1:
                return True

            flag_up = search_word(word, index + 1, matrix, row - 1, col)
            flag_down = search_word(word, index + 1, matrix, row + 1, col)
            flag_left = search_word(word, index + 1, matrix, row, col - 1)
            flag_right = search_word(word, index + 1, matrix, row, col + 1)

            return flag_up or flag_down or flag_left or flag_right
        else:
            return False

    return False


def is_valid_pos(row, col, matrix):
    if 0 <= row < len(matrix) and 0 <= col < len(matrix[0]):
        return True
    return False


if __name__ == '__main__':
    function()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

miss612

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值