运动轨迹是循环的 → ↓ ← ↑ →… 运动轨迹的确定:判断是否是每个运动轨迹轨迹的临界点 。如果不是,继续按照该轨迹运动,是临界点,则转变方向。(这里用 1,2,3,0分别代表→↓ ← ↑ ) 用hor,ver记录当前水平位置和竖直位置,lb, rb, ub, db分别记录当前运动轨迹的左右上下边界。 比如向右运动时 当hor<rb即表示未到临界点,继续运动。
# -*- coding:utf-8 -*- """ 例如,一个 4 行 5 列的螺旋矩阵如下: 1 2 3 4 5 14 15 16 17 6 13 20 19 18 7 12 11 10 9 8 【样例输入】 4 5 2 2 【样例输出】 15 """ l = list(map(int, input().split())) data = [[0 for _ in range(l[1])] for __ in range(l[0])] # 建立对应矩阵 hor, ver = 0, 0 # 初始位置 (0,0) lb, rb, ub, db = 0, l[1] - 1, 0, l[0] - 1 # 初始边界 direction = 1 # 刚开始向右运动 for i in range(1, l[0] * l[1] + 1): if direction == 1: data[hor][ver] = i if ver < rb: ver += 1 else: hor += 1 ub += 1 direction = 2 elif direction == 2: data[hor][ver] = i if hor < db: hor += else: ver -= 1 rb -= 1 direction = 3 elif direction == 3: data[hor][ver] = i if ver > lb: ver -= 1 else: hor -= 1 db -= 1 direction = 0 elif direction == 0: data[hor][ver] = i if hor > ub: hor -= 1 else: ver += 1 lb += 1 direction = 1 yanzheng = list(map(int, input().split())) print(data[yanzheng[0] - 1][yanzheng[1] - 1])