ACwing 756蛇形矩阵

题目描述

输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。

具体矩阵形式可参考样例。

输入格式

输入共一行,包含两个整数n和m。

输出格式

输出满足要求的矩阵。

矩阵占n行,每行包含m个空格隔开的整数。

数据范围

1≤n,m≤1001≤n,m≤100

输入样例:

3 3

输出样例:

1 2 3
8 9 4
7 6 5

按走的方向给没有走过的地方赋值(右下左上) 

#include <iostream>
#include <cstdio>

using namespace std;
const int MAX = 109;

int a[MAX][MAX];


int main()
{
    int n, m;

    scanf("%d%d", &n, &m);

    int sum = n * m;

    int cnt = 0;
    int row = 0;
    int col = 0;
    while(cnt < sum)
    {
        for(int i = 0; i < m; i++) // 右走
        {
            if(!a[row][i])
            {
                a[row][i] = ++ cnt;
                col = i;
            }

        }


        for(int i = row + 1; i < n; i++) // 下走
        {
            if(!a[i][col])
            {
                a[i][col] = ++cnt;
                row = i;
            }
        }

        for(int i = col - 1; i >= 0; i--) // 左走
        {
            if(!a[row][i])
            {
                a[row][i] = ++cnt;
                col = i;
            }
        }

        for(int i = row - 1; i >= 0; i--)
        {
            if(!a[i][col])
            {
                a[i][col] = ++cnt;
                row = i;
            }
        }
    }

    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < m; j++)
            printf("%d ", a[i][j]);
        printf("\n");
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44620183/article/details/112892998