题目描述
简单来说就是每一步改变方向,根据格子的颜色顺时针或者逆时针转动方向,向前走一步,用计算机模拟出移动的路径,基本用不到算法,只不过在调转方向时可以使用python的数据类型
输入为:
第一行是 m n 两个整数(3 < m, n < 100),表示正方形格子的行数和列数
接下来是 m 行数据。
每行数据为 n 个被空格分开的数字。0 表示白格,1 表示黑格。
接下来是一行数据:x y s k, 其中x y为整数,表示蚂蚁所在行号和列号(行号从上到下增长,列号从左到右增长,都是从0开始编号)。s 是一个大写字母,表示蚂蚁头的朝向,我们约定:上下左右分别用:UDLR表示。k 表示蚂蚁走的步数。
输出就是k步之后的坐标
解题思路
上下左右四个方向的调转很容易理解,可以将调转方向与向前移动一步结合,直接在原坐标的基础上朝着某个方向挪一步即可,可以定义一个列表,专门存放朝四个方向挪动时对应的x,y的操作,需要注意的是在我们每一次挪动时,都有哪些操作需要完成:
①染色,这个可以放在第一个
②转动方向,这个很重要,因为下一步还会用到,而且需要当前方向确定下一个方向,由于字典的key值不是一个可迭代对象,所以还需要开辟空间专门存放方向的轮播表,黑格是顺时针,白格是逆时针
③下一步的位置,调转方向后向前走一步,其实这是一步操作
原题链接
链接: click
python代码
m,n=map(int,input().split())
board=[]
for i in range(m):
board.append(list(map(int,input().split())))
tmp=[]
tmp=input().split()
x,y,s,k=int(tmp[0]),int(tmp[1]),tmp[2],int(tmp[3])
#确定方向
dic_b={'U':0,'R':1,'D':2,'L':3}
dir_b=['U','R','D','L']
dic_w={'U':0,'L':1,'D':2,'R':3}
dir_w=['U','L','D','R']
#与题目所指方向不同,这里是朝某个方向挪了一步
step_b=[(-1,0),(0,1),(1,0),(0,-1)]
step_w=[(-1,0),(0,-1),(1,0),(0,1)]
while k:
#黑格:上 右 下 左
#白格:上 左 下 右
#黑格
if board[x][y]==1:
board[x][y]=0
#确定接下来的要移动到的位置以及方向
index=(dic_b[s]+1)%4
step=step_b[index]
s=dir_b[index]
x+=step[0]
y+=step[1]
#白格
elif board[x][y]==0:
board[x][y]=1
#确定接下来的要移动到的位置以及方向
index=(dic_w[s]+1)%4
step=step_w[index]
s=dir_w[index]
x+=step[0]
y+=step[1]
k=k-1
print(x,y)