原题链接:蓝桥杯基础练习VIP-回形取数
解题思路:
判断边界不用||分隔的行列坐标。在输入的矩形外面加一层外框,全部置-1,判断当前移动前方是-1则回退一步,左转。
当前走过的位置赋值-1。
行方向前进增量-1开始,列前进增量1开始。之后每次行前进完,列前进方向取反;列前进完行前进方向取反。行,列方向各前进一次为一轮。一轮都没有前进则退出循环。
优化外框只需要3个关键位置置为-1。

参考代码:
#include <stdio.h>
#define N 202
int main()
{
int a[N][N]={0};
int m,n;
int flag=0,x=1,y=1,c=1;
int incy=-1,incx=1;
scanf("%d%d",&m,&n);
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
a[m+1][1]= -1;
a[m][n+1]= -1;
a[0][n]= -1;
while(c){
c=0;
while(a[x][y]!=-1){
if(x!=1||y!=1)
printf(" ");
printf("%d",a[x][y]);
a[x][y]=-1;
x+=incx;
c=1;
}
if(c==0) break;
x-=incx;
incy=-incy;
y+=incy;
while(a[x][y]!=-1){
printf(" %d",a[x][y]);
a[x][y]=-1;
y+=incy;
c=2;
}
y-=incy;
incx=-incx;
x+=incx;
}
}0.0分
3 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复