找到它
题目描述
找到它是个小游戏,你需要在一个矩阵中找到给定的单词。假设给定单词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()