【初体验】矩阵的螺旋输出:Python C 实现

12100213   ·   发表于 3个月前   ·   编程代码
矩阵的螺旋输出:[Python][C]实现
1. 问题概述
2. 思路构建
3. 程序实现
3.1 方法一
3.2 方法二
3.2.1 发现
3.2.2 关键准备工作
3.2.3 核心算法
3.2.4 完整程序
4 写在最后

1. 问题概述
给定一个M*N(M行,N列)的矩阵,以螺旋的顺序返回矩阵所有元素。

本文以顺时针螺旋为例。

关键词:二维数组、螺旋输出、遍历

2. 思路构建
最近在做CCFCSP。但是CCFCSP上没有这个题,所以这个题是我虚构的。

CCFCSP的题目通常会给出mm、nn的大小;

然后依次输入m×nm×n二维数组的元素。

补充:假设0
例如

3. 程序实现
下面两种方法,方法一是Python实现,方法二是C语言实现。两种语言用的方法不一样,请家人们自行选择观看。

3.1 方法一
按照矩阵的“厚度”循环。

即第t次循环以t,t为起点以(t+1,t)为终点画圈,直到将Matrix螺旋遍历完毕;

这种方式理解起来非常简单,社区里很多人都写。

这里不多做赘述,下面直接放python实现的代码。

注:Python接收的是一个二维列表

3.2 方法二
重点来说说方法二

画出数组的“地图”,若碰到地图的“边界”或已遍历过的“区域”,就改变“方向”。遍历结束后退出程序即可;

敲黑板!!!这几个词下面要考

3.2.1 发现
顺时针旋转的呈现出规律性:

向右遍历、向下遍历、向左遍历、向上遍历、向右遍历…

如此往复,如下图

3.2.2 关键准备工作
写程序就如同炒菜,要做一些准备

3.2.3 核心算法
通过索引进入矩阵,首先要将矩阵的当前值带出来;

其次,既然已经读取了,就要在地图上记录访问过该点了

将两句伪代码打包写成一个函数

显然,我们还要进行判断

判断下个要去的矩阵点是否可进入。

如果不能进入要调整行径方向的索引。

很容易得知,需要进行两次判断。

判断下一次的索引坐标是否可以走。若可走,则将索引坐标赋给next;若不可走,根据判断程序会更改坐标索引(t++),再将索引坐标赋给next;
判断被赋值的next,若可走,则进行next坐标的读取;若不可走,则说明已经遍历完毕了,得退出程序。

2 Reply   |  Until 2个月前 | 3702 View

yyl941
发表于 3个月前

3.2.4 完整程序

评论列表

  • 加载数据中...

编写评论内容

浪漫之初
发表于 3个月前

4 写在最后
文案、代码、制作:Lyn#reo

由于写Python题的时候,算遍历的边界坐标让我算的头疼,所以我想写个不用坐标来管边界的程序,但我又不会写Python的实现方法,于是本文就诞生了。

本文只是以顺时针为例,逆时针只需要改变Go中储存位置的顺序就好了。

思路受启发于CCFCSP2013-5的用DFS“画地图”思路,并不是真正意义上的DFS。

它的缺点是空间占用要多使用(4n+4)(4n+4)的空间

介绍地比较深入,仔细看时方便理解,如果觉得我写的不错,还请为我点个免费的赞!

评论列表

  • 加载数据中...

编写评论内容
LoginCan Publish Content