“之“字形打印矩阵

该篇博客介绍了如何按照‘之’字形的方式打印二维矩阵。代码使用C++编写,通过维护两个对角线上的点,分别进行左右下上移动,实现了额外空间复杂度为O(1)的解决方案。示例展示了对一个4x4矩阵的‘之’字形打印。
"之"字形打印矩阵

题目描述

给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵,如样例所示。

输入描述:

输入包含多行,第一行包含两个整数n和m ( 1 ≤ n , m ≤ 200 ) (1 \leq n,m \leq 200) (1n,m200),代表矩阵的行数和列数,接下来n行,每行m个整数,代表矩阵 m a t r i x ( 1 ≤ m a t r i x [ i ] [ j ] ≤ 40000 ) matrix(1\leq matrix[i][j] \leq 40000) matrix(1matrix[i][j]40000)

输出描述:

输出一行 ,代表“之”字形输出的矩阵。

示例1
输入
4 4
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
输出
1 2 5 9 6 3 4 7 10 13 14 11 8 12 15 16
备注:

额外空间复杂度 O ( 1 ) O(1) O(1)


题解:

使用两个点维护每一条对角线,第一个点 (tr,tc) 从左上角开始,往右,往下移动;第二个点 (dr,dc) 从左上角开始,往下、往右移动,每次将两个点连线上的元素输出即可。

代码:
#include <cstdio>

using namespace std;

const int N = 200;

int n, m;
int a[N][N];

void print( int tr, int tc, int dr, int dc, bool &flag ) {
    if ( flag ) {
        while ( tr <= dr ) printf("%d ", a[tr++][tc--]);
    } else {
        while ( dr >= tr ) printf("%d ", a[dr--][dc++]);
    }
}

int main(void) {
    scanf("%d%d", &n, &m);
    for ( int i = 0; i < n; ++i ) {
        for ( int j = 0; j < m; ++j )
            scanf("%d", a[i] + j);
    }
    int tr = 0, tc = 0;
    int dr = 0, dc = 0;
    bool flag = false;
    while ( tr < n ) {
        print( tr, tc, dr, dc, flag );
        tr += ( tc == m - 1 );
        tc += ( tc != m - 1 );
        dc += ( dr == n - 1 );
        dr += ( dr != n - 1 );
        flag = !flag;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值