问题 Z 回形取数

来源:互联网 发布:淘宝卖家人工客服 编辑:程序博客网 时间:2024/05/29 14:03

题目描述
  回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。

输入
  输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
输出
  输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。

样例输入
3 3
1 2 3
4 5 6
7 8 9
3 2
1 2
3 4
5 6
样例输出
1 4 7 8 9 6 3 2 5
1 3 5 6 4 2

#include<stdio.h>#include<string.h>int main( int argc, char **argv ){    int M, N;    while( scanf( "%d%d", &M, &N ) != EOF )    {        int Array[202][202], Book[202][202];        memset( Array, -1, sizeof( Array ) ), memset( Book, 0, sizeof( Book ) );        int i, j, Count = 0, X = 1, Y = 1;        for( i = 1; i <= M; ++i )            for( j = 1; j <= N; ++j )                scanf( "%d", &Array[i][j] );        printf( "%d", Array[X][Y] );        Book[X][Y] = 1;        Count++;        while( Count < N * M )        {            while( Array[X + 1][Y] != -1 && Book[X + 1][Y] == 0 )            {                X++;                printf( " %d", Array[X][Y] );                Book[X][Y] = 1;                Count++;            }            while( Array[X][Y + 1] != -1 && Book[X][Y + 1] == 0 )            {                Y++;                printf( " %d", Array[X][Y] );                Book[X][Y] = 1;                Count++;            }            while( Array[X - 1][Y] != -1 && Book[X -1 ][Y] == 0 )            {                X--;                printf( " %d", Array[X][Y] );                Book[X][Y] = 1;                Count++;            }            while( Array[X][Y - 1] != -1 && Book[X][Y - 1] == 0 )            {                Y--;                printf( " %d", Array[X][Y] );                Book[X][Y] = 1;                Count++;            }        }        printf( "\n" );    }    return 0;}
0 0
原创粉丝点击