这道题来自洛谷P5731 【深基5.习6】蛇形方阵 - 洛谷
题目描述
讲解算法思路
初看本题首先想到的也许可以暴力枚举每一行每一列再填入相应的数字。但是仔细审题可以发现暴力枚举是一个吃力不讨好的办法,那么今天我带来的是优化后的代码。
首先读题不难发现,本题是从第一行由右往左依次填入直到无法填入再转而向下,再向左,向上,向右。那么我们该如何让他实现类似于拐弯的效果呢?其实我们可以定义两个方向数组,再让每行每列依次加上数组中的值来达到填入下一个值的效果。然后再依次判断每次填入是否合法(即是否越界和填入重复值)
代码实现
完整的代码可以参考模拟/蛇形方阵 · 陈佳栋/o.O.c - 码云 - 开源中国
那么让我们先定义两个方向数组
dx即每行在不拐弯之前要加上的值,dy即每列在不拐弯之前要加上的值
判断过程
其中判断是否越界中的s[a][b],为判断之前此处已经填入元素。
pos = (pos + 1) % 4;为拐弯过程
在所有步骤完成后就可以输出了
关于本题需要注意的点是如何拐弯以及判断越界问题。