一、可以手动作图,从N=3开始可以看出,一个大的螺旋矩阵的内部是一个小的矩阵。

由此引入递归的思维。递归式大概是:func (大螺旋矩阵) = 4条外边 + func(小螺旋矩阵)

二、设计递归函数fun(k,s,len,a),参数解释如下:

1) 螺旋矩阵的层数k, 从0开始, 方便记录下标

2) s是我们待插入矩阵的值,依次递增,把第k个螺旋矩阵的4条边填满 ;

3) len代表层数k的螺旋矩阵的边长

4) a代表最终构建的螺旋矩阵,传的是引用,因为需要不断的更新。

设计思想:

递归的结束条件:当层数矩阵的长度 len ==1或者2时,直接构建螺旋矩阵,结束当前递归

否则,依次从上,右,下,左的顺序构建矩阵的四条边

继续构建更内层的螺旋矩阵fun(k+1,s,len-2,a),这个s是插入第k个矩阵完成后,新的s值

//k是代表由外而内第k个矩阵,s是第k个螺旋矩阵的左上角的第一个值
//len代表第k个矩阵的长度,a是目标螺旋矩阵
void func(int k,int s,int len,vector<vector<int>> &a) {if(len==1) { //第一种边界情况,插入一个值a[k][k]=s;return ;}if(len==2) { //第二种边界情况,插入四个值a[k][k]=s++;a[k][k+1]=s++;a[k+1][k+1]=s++;a[k+1][k]=s++;return ;}//其他情况//先定义第k个螺旋矩阵,它的各个边界的坐标,上边和左边则为kint up = k;int left = k;int right = a.size()-k-1;                                                                                     -1;//右边界int down = a.size()-k-1;//下边界for(int i = k; i <=right; i++) { //从左到右a[up][i]=s++;}up++;//上边界下移for(int i = up; i<=down; i++) { //从上到下a[i][right]=s++;}right--;//右边界左移for(int i = right;i>=left;i--){//从右到左a[down][i]=s++;}down--;//下边界上移for(int i = down;i>=up;i-- ){//从下到上a[i][left]=s++;}func(k+1,s,len-2,a);//递归构建更内层的螺旋矩阵
}
int main() {int n;cin>>n;while(n!=0) {vector<vector<int>> a(n, vector<int>(n, 0));//初始化一个二维数组;func(0,1,n,a);for(auto i :a){for(auto j:i){cout<<j<<" ";}cout<<endl;}cin>>n;//输入新的n值}system("pause");return 0;
}

递归实现n阶螺旋矩阵问题相关推荐

  1. 解答私信@田田WX //2020-12-30 左右n阶螺旋矩阵

    输出下面的n(3<=n<=19)阶螺旋矩阵.输入n(=5),输出如下左图所示的螺旋矩阵.输入-n(=-5),输出如下右图所示的螺旋矩阵. 顺时针右旋 1 2 3 4 5 16 17 18 ...

  2. n阶螺旋矩阵(java)

    题目描述:编写一个程序,对任意输入的正整数n,产生并显示n阶螺旋式数字方阵. 如n=4时 显示的方阵为: n=5时 显示的方阵为: 解题思路: 我所用的原理是递归加上普通的循环,从最外层开始赋值,通过 ...

  3. c语言编程 输入螺旋数组,C语言 经典题目螺旋矩阵 实例详解

    C语言 经典题目螺旋矩阵 实例详解 C语言 经典题目螺旋矩阵 //N阶螺旋矩阵 #include #include int main() { int N,i,j,n,num=1; int a[10][ ...

  4. 悠然乱弹:螺旋矩阵和蛇型矩阵的悠然版实现

    2019独角兽企业重金招聘Python工程师标准>>> 螺旋矩阵和蛇型矩阵,是两个比较有趣的矩阵,有许多的公司面试题中有出现,这两个题的答案也有许多种,简单问一下度娘,就各自有N种实 ...

  5. MxN螺旋矩阵(由外向内)

    问题描述 按顺时针方向构建一个MxN的螺旋矩阵(或按顺时针方向螺旋访问一个MxN的矩阵):在不构造螺旋矩阵的情况下,给定坐标i.j值求其对应的值f(i, j).如对11x7 矩阵, f(4, 0) = ...

  6. 用java实现螺旋矩阵算法

    用java实现螺旋矩阵算法 一.思路讲解 刚拿到这道题的时候想的是一圈一圈的实现一个螺旋矩阵,但我觉得那样的方法太麻烦了,在网上看到一个大佬的算法觉得挺好的,自己总结了一下,拿出来给大家分享分享. 这 ...

  7. java 螺旋方阵_Java for 螺旋矩阵和蛇型矩阵

    螺旋矩阵和蛇型矩阵,是两个比较有趣的矩阵问题,这两个问题的答案也有许多种,简单问一下Baidu,就各自有N种实现,来源也非常丰富,比如CSDN.ITEYE.等等,当然也包括著名的OSC,但是整体看下来 ...

  8. 螺旋矩阵(c语言实现)

    腾讯2016年实习生笔试题 蛇形矩阵,也叫螺旋矩阵,指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大, 向左变大,向上变大,如此循环. /* 思想就是: 螺旋,有四个方向,从左到右, ...

  9. 螺旋矩阵(递归问题)

    题目描述: Problem Description bLue 有一个长度为 n*n 的序列,现在他想把这个序列填到一个 n*n 的螺旋矩阵中,你能帮助他吗? Input 输入数据有多组(数据组数不超过 ...

最新文章

  1. 小米5x_除了一亿像素,对于小米CC9pro可能你还要了解这些
  2. 电动力学每日一题 2021/10/11
  3. tomcat站点配置
  4. Spring核心系列之Spring中的事务
  5. GetURL (java)
  6. mysql mod如何使用_mysql 操作详解
  7. Vue双向绑定的实现原理系列(三):监听器Observer和订阅者Watcher
  8. cocos2d Labels and Fonts 标签和字体
  9. WPS如何按单元格背景颜色求和
  10. 厚着脸皮求领导写了一篇java小白进阶大牛之路!!!
  11. Bluetooth 5 新功能概述
  12. [正则表达式] 匹配空行、空白行
  13. mysql-ACID
  14. 华为:证实已开发出自主操作系统
  15. 题解 P1985 【[USACO07OPEN]翻转棋】
  16. 记一次php、sql注入学习后的一道ctf代码审计题复盘
  17. Docker Swarm-Docker
  18. 三校生计算机题目及答案,“三校生”对口升学计算机应用试卷计算机基础知识(含答案)...
  19. ECCV 2022 | 港中文MMLab:基于Transformer的光流
  20. mysql字连接查询实现至少选修C1和C2两门课的学生和一个都没有被选中的课程

热门文章

  1. 写作分析——缓和说教内容
  2. ES+Redis+MySQL,高可用架构设计太牛了!(至尊典藏版)
  3. linux 列转行函数,GP行转列、列转行函数
  4. 掌握18种特殊布线的画法与技巧,PCB设计无往不利!
  5. C# 调用微信公众号接口发送客服消息示例
  6. 解决android sdk中找不到tools目录Android sdkmanager tool not found (D:\Android\SDK\tools\bin\sdkmanager).
  7. html生成列表模板的方法
  8. 土地利用现状分类统计表生成
  9. 一个汉字包括几个字符,几个字节?一个字母呢?
  10. 第十章 sed. 其他各章可察看相应的 link.