有趣的模拟题——蛇形矩阵

这道题来自洛谷P5731 【深基5.习6】蛇形方阵 - 洛谷

题目描述

讲解算法思路

初看本题首先想到的也许可以暴力枚举每一行每一列再填入相应的数字。但是仔细审题可以发现暴力枚举是一个吃力不讨好的办法,那么今天我带来的是优化后的代码。

首先读题不难发现,本题是从第一行由右往左依次填入直到无法填入再转而向下,再向左,向上,向右。那么我们该如何让他实现类似于拐弯的效果呢?其实我们可以定义两个方向数组,再让每行每列依次加上数组中的值来达到填入下一个值的效果。然后再依次判断每次填入是否合法(即是否越界和填入重复值)

代码实现

完整的代码可以参考模拟/蛇形方阵 · 陈佳栋/o.O.c - 码云 - 开源中国

那么让我们先定义两个方向数组

dx即每行在不拐弯之前要加上的值,dy即每列在不拐弯之前要加上的值

判断过程

其中判断是否越界中的s[a][b],为判断之前此处已经填入元素。

pos = (pos + 1) % 4;为拐弯过程

在所有步骤完成后就可以输出了

关于本题需要注意的点是如何拐弯以及判断越界问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值