当前位置: 首页 > news >正文

上海计算机学会2026年4月月赛C++丙组T3 螺旋矩阵

螺旋矩阵

题目描述

给定一个正整数NNN,请打印出一个N×NN \times NN×N的螺旋矩阵。

螺旋矩阵定义如下:从左上角出发,初始时向右移动,如果前方是没有经过的格子,则继续前进,否则,右转九十度。重复上述操作直到经过所有格子,按照先后顺序填充数字111N2N^2N2

下图是N=4N=4N=4时的螺旋矩阵:

1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7

输入格式

单个整数:表示NNN

输出格式

输出一个N×NN \times NN×N的螺旋矩阵

数据范围

1≤N≤3001 \leq N \leq 3001N300

样例数据

输入

4

输出

1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7

题解

我采用方向数组模拟的方法解决螺旋矩阵问题,核心思路是按照右、下、左、上的顺序循环移动,遇到边界或已填充的数字时转向,直到填满整个矩阵。

完整代码(仅添加注释,不修改逻辑)

#include<bits/stdc++.h>usingnamespacestd;// 定义最大数组,满足N≤300的要求inta[305][305];// 存储输入的矩阵边长intn;// 方向数组:右、下、左、上 四个方向的x坐标偏移量intdx[]={0,1,0,-1};// 方向数组:右、下、左、上 四个方向的y坐标偏移量intdy[]={1,0,-1,0};intmain(){// 输入矩阵边长ncin>>n;// 初始位置:左上角(1,1)intx=1,y=1;// 初始方向:0代表向右intf=0;// 循环填充1~n²的所有数字for(inti=1;i<=n*n;i++){// 将当前数字填入对应位置a[x][y]=i;// 计算下一步要移动到的坐标intxx=x+dx[f];intyy=y+dy[f];// 判断下一步坐标是否合法(在矩阵内+未被填充)if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&a[xx][yy]==0){// 合法则直接移动x=xx;y=yy;}else{// 不合法则右转(方向+1,对4取模实现循环)f++;f%=4;// 按照新方向移动一步x+=dx[f];y+=dy[f];}}// 遍历输出整个矩阵for(inti=1;i<=n;i++){for(intj=1;j<=n;j++){cout<<a[i][j]<<" ";}// 每行输出完毕后换行cout<<"\n";}return0;}

代码说明

  1. 方向数组设计dxdy分别对应右、下、左、上四个方向的坐标偏移,通过切换数组下标实现转向。
  2. 移动逻辑:从起点开始,每次尝试向当前方向前进,若位置合法则移动,不合法则右转后再移动。
  3. 边界判断:严格限制坐标在1∼n1 \sim n1n范围内,同时判断目标位置是否未被填充(值为0)。
  4. 输出:双层循环遍历二维数组,按行打印螺旋矩阵。

该算法时间复杂度为O(N2)O(N^2)O(N2),空间复杂度为O(N2)O(N^2)O(N2),完美适配题目N≤300N \leq 300N300的数据范围。

总结

  1. 我用方向数组模拟螺旋移动的路径,实现了螺旋矩阵的填充;
  2. 核心逻辑是合法则前进,不合法则转向
  3. 代码时间复杂度最优,能高效处理题目给定的数据范围。
http://www.jsqmd.com/news/771923/

相关文章:

  • 厂家直供推荐!2026广州聚杰芯科交调设备,质量稳定售后无忧 - 品牌速递
  • Emacs AI编程接口:统一多模型后端,实现工程化开发工作流
  • 告别布线噩梦!用Valens VS3000芯片,一根网线搞定4K视频、音频、网络和USB
  • 大连可靠的西装定制哪家划算?维纳缇等5大品牌深度解析 - 西装爱好者
  • 多模态视频理解:跨模态联合推理与评估体系构建
  • 【深度测评】2026年陕西育儿嫂/月嫂/保姆/家庭保洁/商业保洁公司TOP5怎么选? - 深度智识库
  • TypingMind静态自托管部署指南:构建私有AI聊天前端工作台
  • UCIe协议层实战解析:PCIe 6.0与CXL 3.0的Flit模式到底怎么选?
  • Tita 小技巧|未审批 OKR 也能对齐,打破审批流程阻碍
  • 2026交通量调查系统哪家好?认准广州聚杰芯科交通量调查系统 - 品牌速递
  • OpenClaw怎么搭建?2026年本地10分钟新手超简单教程及百炼Coding Plan方法
  • 用STM32F407的DAC做个简易信号发生器:CubeMX配置+按键调压+ADC自检一条龙
  • 告别EV2300?手把手教你用STM32自制BQ4050调试器,读取电压电流温度
  • 长期使用Taotoken聚合服务对项目运维复杂度的简化感受
  • 2026年陕西育儿嫂/月嫂/保姆及保洁公司深度测评:相伴无忧分析报告出炉! - 深度智识库
  • 本地大语言模型部署指南:从硬件选型到实战调优
  • 北京可靠的西装定制哪家划算?维纳缇等5大品牌深度解析 - 西装爱好者
  • OllamaTalk:打造本地化语音AI助手,实现全离线语音对话
  • Gemini 3 Pro 给了10Mtoken context,60% 这个数字让我换回了记忆方案
  • OpenClaw如何集成?2026年阿里云1分钟云端小白保姆级搭建及百炼Coding Plan步骤
  • 狐蒂云骗钱,许跃滨老板跑路了,我还有他当时的活动规则(用户协议),说的比唱的好听
  • AI智能体与地理空间分析融合:eGEOagents框架解析与实践
  • NVIDIA Profile Inspector终极实战指南:显卡性能调校完全手册
  • 3分钟极速部署:用WeakAuras Companion告别手动更新烦恼
  • 初创公司如何借助Taotoken实现敏捷的AI能力集成
  • 338. 比特位计数
  • 在线去水印怎么做?2026 免费在线去水印工具推荐,图片视频在线去除水印方法全整理 - 科技热点发布
  • 从零搭建一个高性能存储网关:手把手整合SPDK、DPDK与RDMA实战
  • 2026奇点大会AISMM文化基线报告:TOP10科技企业已启动文化-模型双向对齐,你还在单向灌输?
  • WPF称重系统实战:如何用C#和键盘钩子实现无焦点扫码,对接动态二维码