PAT-Basic-1050. 螺旋矩阵

本题要求将给定的N个正整数按非递增的顺序,填入“螺旋矩阵”。所谓“螺旋矩阵”,是指从左上角第1个格子开始,按顺时针螺旋方向填充。要求矩阵的规模为m行n列,满足条件:m*n等于N;m>=n;且m-n取所有可能值中的最小值。

输入格式:

输入在第1行中给出一个正整数N,第2行给出N个待填充的正整数。所有数字不超过104,相邻数字以空格分隔。

输出格式:

输出螺旋矩阵。每行n个数字,共m行。相邻数字以1个空格分隔,行末不得有多余空格。

输入样例:

输出样例:

尽管是一道25分的题,但是还算是比较简单的,一开始没想到这种相对简单的方法,打算通过一个变量level来控制螺旋的层数,实现顺时针螺旋遍历。

但是觉得这样太麻烦,刚打完这个变量名就想起了上学期C专题写的迷宫程序,当时用DFS生成迷宫时将 srand(time(NULL)) 放到了循环体内,就生成了一个螺旋的路线XD

于是,便又一次使用了类似于遍历迷宫的方法实现了这个矩阵的遍历。

代码如下:

 

2 评论

  1. 大神 ~我刚刚学习C;canmove和move那部分没有看懂 怎么实现自动选择方向的?filter作用是什么呢?

    1. canmove 用于判断边界条件和是否访问过该位置,filler 用于记录当前所在位置的坐标,自动方向选择通过 direction 数组实现,在“遇到障碍物”前保持一个方向移动,否则改变为另一个方向。

发表评论

电子邮件地址不会被公开。 必填项已用*标注