#给定一个单词,再给一个由字母组成的矩阵,按单词字母的顺序去游走矩阵,类似于贪吃蛇,不能吃自己(即走过的路不能再走),矩阵的上下左右边界可以穿越(比如左边越界就会走到最右边第一个),输出所走过矩阵中字母的坐标,如果没有这样的路经则输出-1
#递归思路
#定义递归函数
def search(a,b,sheid): #获得当前所在坐标和当前所在字母在单词中的下标
if sheid+1==len(she): #如果已经走完整个单词,则打印路经,结束程序
print(quanjv) #可能会有多条路经能走通,但题目已经限定最靠近左上角的那一条
exit() #所以只要找到一条就可以果断退出,下面的左上下右顺序其实也是有深意的
bb=b-1 if b-1>=0 else x #左面一个
if xy[a][bb]==she[sheid+1] and ([a],[bb]) not in quanjv: #目标字母出现且其坐标尚未走过
quanjv.append(([a],[bb])) #则记录其路经
search(a,bb,sheid+1) #并以新的坐标为入口周而复始
aa=a-1 if a-1>=0 else y #上面一个
if xy[aa][b]==she[sheid+1] and ([aa],[b]) not in quanjv:
quanjv.append(([aa],[b]))
search(aa,b,sheid+1)
aa=a+1 if a+1!=y else 0 #下面一个
if xy[aa][b]==she[sheid+1] and ([aa],[b]) not in quanjv:
quanjv.append(([aa],[b]))
search(aa,b,sheid+1)
bb=b+1 if b + 1 != x else 0 #右面一个
if xy[a][bb]==she[sheid+1] and ([aa],[b]) not in quanjv:
quanjv.append(([a],[bb]))
search(a,bb,sheid+1)
quanjv.pop() #如果四面都走不通则回退,弹出一个已存储的坐标
return #回归到上一层
#函数定义完毕,下面正式开始
long=input()
long=int(long)
she=input().replace(' ','')
y,x=input().split()
x=int(x);y=int(y)
xy=[input().split() for i in range(x)]
quanjv=[] #定义全局变量用来存储路经
for i in range(y): #要在四条边上找入口,题目没有说入口在哪条边上也没有限定入口只有一个
if xy[i][0]==she[0]:
enter=(i,0)
quanjv.append(enter)
search(enter[0],enter[1],0) #把入口坐标和入口字母在单词中的下标传入
for i in range(x):
if xy[0][i]==she[0]:
enter=(0,i)
quanjv.append(enter)
search(enter[0],enter[1],0)
for i in range(x):
if xy[y-1][i]==she[0]:
enter=(y-1,i)
quanjv.append(enter)
search(enter[0],enter[1],0)
for i in range(y):
if xy[i][x-1]==she[0]:
enter=(i,x-1)
quanjv.append(enter)
search(enter[0],enter[1],0)