杜老师


私信TA

用户名:ooyoyo

访问量:2032

签 名:

等  级
排  名 11044
经  验 1052
参赛次数 0
文章发表 3
年  龄 0
在职情况 教师
学  校 上海健康医学院
专  业

  自我简介:

TA的其他文章

耗时8 解法 C语言
浏览:361
二进制问题
浏览:1229

解题思路:

  1. 判断边界不用||分隔的行列坐标。在输入的矩形外面加一层外框,全部置-1,判断当前移动前方是-1则回退一步,左转。

  2. 当前走过的位置赋值-1。

  3. 行方向前进增量-1开始,列前进增量1开始。之后每次行前进完,列前进方向取反;列前进完行前进方向取反。行,列方向各前进一次为一轮。一轮都没有前进则退出循环。

  4. 优化外框只需要3个关键位置置为-1。


    屏幕截图 2022-04-10 105634.jpg


参考代码:

#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 人评分

  评论区

  • «
  • »