回型矩阵(板子题)

题目

输入一个 𝑛 行 𝑚 列的矩阵,从左上角开始将其按回字形的顺序顺时针打印出来。

参数

变量 / 数组 作用
arr[50][50] 存储输入的矩阵(最多支持 50×50 的矩阵)
st[50][50] 标记矩阵中的位置是否已经被打印过(true= 已打印,false= 未打印)
dx[4] / dy[4] 方向数组:控制移动的 "上下左右"
d 当前移动方向(0 = 上,1 = 右,2 = 下,3 = 左)
x / y 当前所在的矩阵坐标(x = 行号,y = 列号)

方向数组

cpp 复制代码
// dx控制行的变化,dy控制列的变化
int dx[4] = {-1, 0, 1, 0}; // 上(行-1)、右(行不变)、下(行+1)、左(行不变)
int dy[4] = {0, 1, 0, -1}; // 上(列不变)、右(列+1)、下(列不变)、左(列-1)

代码

cpp 复制代码
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    int n, m;
    int arr[50][50]; // 存储矩阵

    // 1. 输入矩阵的行数n、列数m,再输入矩阵元素
    cin >> n >> m;
    for (int i = 0; i < n; i ++ )
        for (int j = 0; j < m; j ++ )
            cin >> arr[i][j];

    // 2. 初始化标记数组(所有位置默认未打印)
    bool st[50][50] = {false};
    // 3. 方向数组:上、右、下、左
    int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
    // 4. 初始状态:方向d=1(右),起始位置(0,0)(矩阵左上角)
    int d = 1, x = 0, y = 0;

    // 5. 核心循环:要打印n*m个元素(矩阵总元素数)
    for (int i = 0; i < n * m; i ++ )
    {
        // 5.1 计算下一个要移动的位置(a,b)
        int a = x + dx[d], b = y + dy[d];
        
        // 5.2 判断下一个位置是否"越界"或"已打印":是则换方向
        if (a < 0 || a >= n || b < 0 || b >= m || st[a][b])
        {
            d = (d + 1) % 4; // 换方向(右→下→左→上→右...循环)
            a = x + dx[d], b = y + dy[d]; // 换方向后重新计算下一个位置
        }

        // 5.3 打印当前位置的元素,标记为已打印
        cout << arr[x][y] << ' ';
        st[x][y] = true;

        // 5.4 移动到下一个位置
        x = a, y = b;
    }
    cout << endl;
    return 0;
}
相关推荐
誰能久伴不乏2 小时前
Qt 启动时序与事件循环:为什么监控启动不要放在构造函数里,以及 `QTimer::singleShot(0, ...)` 到底做了什么
c语言·c++·qt
aigcapi2 小时前
2026年跨境运营矩阵系统TOP5测评,客观展现“矩阵系统哪家好?”
大数据·人工智能·矩阵
Σίσυφος19002 小时前
视觉矩阵 之 单应矩阵
人工智能·算法·矩阵
ajole2 小时前
C++学习笔记——stack和queue
开发语言·数据结构·c++·笔记·学习·stl·学习方法
weisian1512 小时前
进阶篇-3-数学篇-2--从线性代数到AI:向量、矩阵、张量的底层逻辑
人工智能·线性代数·矩阵·向量·张量
晨非辰2 小时前
Linux文件操作实战:压缩/传输/计算10分钟速成,掌握核心命令组合与Shell内核交互秘籍
linux·运维·服务器·c++·人工智能·python·交互
MSTcheng.2 小时前
【C++】使用哈希表封装unordered_set和unordered_map!
c++·哈希算法·散列表·map/set封装
努力努力再努力wz3 小时前
【Linux网络系列】:JSON+HTTP,用C++手搓一个web计算器服务器!
java·linux·运维·服务器·c语言·数据结构·c++
D_evil__10 小时前
【Effective Modern C++】第二章 auto:6. 当auto推导的类型不符合要求时,使用显式类型初始化习惯用法
c++