美文网首页
2020-05-26 回形取数

2020-05-26 回形取数

作者: JalorOo | 来源:发表于2020-05-26 10:32 被阅读0次
    #include <iostream>
    #include <cstdio>
    using namespace std;
    //
    //描述
    //
    //  回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。一开始位于矩阵左上角,方向向下。
    //
    //输入
    //输入描述:
    //  输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。接下来m行每行n个整数,表示这个矩阵。
    //输入样例:
    //3 3
    //1 2 3
    //4 5 6
    //7 8 9
    //
    //输出
    //
    //输出描述:
    //  输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。数之间用一个空格分隔,行末不要有多余的空格。
    //输出样例:
    //1 4 7 8 9 6 3 2 5
    
    int mp[205][205];
    
    int main(){
        int n,m;
        const int x[] = {1,0,-1,0};
        const int y[] = {0,1,0,-1};
        scanf("%d%d",&m,&n);
        //memset(mp,-1,sizeof(mp));
        for (int i = 1; i<=m; i++) {
            for (int j = 1; j<=n; j++) {
                scanf("%d",&mp[i][j]);
            }
        }
        int total = m*n;
        int a = 0,b = 1;
        while (total) {
            while(a+1<=m&&mp[a+1][b]!=-1)//向下取数
            {
                printf("%d ",mp[++a][b]);
                mp[a][b]=-1;//将取过的位置置为-1
                total--;
            }
            while(b+1<=n&&mp[a][b+1]!=-1)//向右取数
            {
                printf("%d ",mp[a][++b]);
                mp[a][b]=-1;
                total--;
            }
            while(a-1>0&&mp[a-1][b]!=-1)//向上取数
            {
                printf("%d ",mp[--a][b]);
                mp[a][b]=-1;
                total--;
            }
            while(b-1>0&&mp[a][b-1]!=-1)//向左取数
            {
                printf("%d ",mp[a][--b]);
                mp[a][b]=-1;
                total--;
            }
        }
        printf("\n");
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:2020-05-26 回形取数

          本文链接:https://www.haomeiwen.com/subject/aydmahtx.html