解题思路:
判断边界不用||分隔的行列坐标。在输入的矩形外面加一层外框,全部置-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++代码)浏览:2195 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:583 |
打水问题 (C语言代码)浏览:1148 |
计算质因子 (C++代码)浏览:1825 |
程序员的表白 (C语言代码)浏览:706 |
大神老白 (C语言代码)浏览:690 |
WU-图形输出 (C++代码)浏览:836 |
wu-淘淘的名单 (C++代码)浏览:1532 |
简单的a+b (C语言代码)浏览:574 |
1054题解浏览:516 |