螺旋阵(递归和非递归)

简介: 1 #include 2 #include 3 #include 4 5 int **matrix; 6 int value = 1; 7 8 void recursion (int row, int col, int len) ...
  1 #include <iostream>
  2 #include <cstdlib>
  3 #include <cstring>
  4 
  5 int **matrix;
  6 int value = 1;
  7 
  8 void recursion (int row, int col, int len)              // row, col代表本次左上角元素的位置, len为本次矩阵边长
  9 {
 10     if (len <= 0)
 11     {
 12         return;
 13     }
 14     
 15     int i = row, j = col;
 16     while (j < col + len)
 17     {
 18         matrix[i][j++] = value++;
 19     }
 20     
 21     j--;
 22     i++;
 23     
 24     while (i < row + len)
 25     {
 26         matrix[i++][j] = value++;
 27     }
 28     
 29     i--;
 30     j--;
 31     
 32     while (j >= col)
 33     {
 34         matrix[i][j--] = value++;
 35     }
 36     
 37     j++;
 38     i--;
 39     
 40     while (i > row)
 41     {
 42         matrix[i--][j] = value++;
 43     }
 44     
 45     i++;
 46     j++;
 47     
 48     recursion(i, j, len - 2);
 49 }
 50 
 51 void no_recursion ( int n )                    // n为整个矩阵的边长
 52 {    
 53     int i, j, len, col, row;
 54     for (i = 0, j = 0, len = n; len > 0; )
 55     {
 56         row = i;
 57         col = j;
 58         
 59         while (j < col + len)
 60         {
 61             matrix[i][j++] = value++;
 62         }
 63         
 64         j--;
 65         i++;
 66         
 67         while (i < row + len)
 68         {
 69             matrix[i++][j] = value++;
 70         }
 71         
 72         i--;
 73         j--;
 74         
 75         while (j >= col)
 76         {
 77             matrix[i][j--] = value++;
 78         }
 79         
 80         j++;
 81         i--;
 82         
 83         while (i > row)
 84         {
 85             matrix[i--][j] = value++;
 86         }
 87         
 88         i++;
 89         j++;
 90         
 91         len = len - 2;
 92     }
 93 }
 94 
 95 int main()
 96 {
 97     int N = 7, i, j;
 98     matrix = (int**) malloc(sizeof(int*) * N);
 99     
100     for (i = 0; i < N; i++)
101     {
102         matrix[i] = (int*) malloc(sizeof(int) * N);
103         memset(matrix[i], 0, sizeof(int) * N);
104     }
105     
106     no_recursion(N);
107     
108     for (i = 0; i < N; i++)
109     {
110         for (j = 0; j < N; j++)
111         {
112             std::cout << matrix[i][j] << ' ';
113         }
114         std::cout << std::endl;
115     }
116     
117     for (i = 0; i < N; i++)
118     {
119         free(matrix[i]);
120     }
121     
122     free(matrix);
123     
124     return 0;
125 }
  1 #include <iostream>
  2 #include <cstdlib>
  3 #include <cstring>
  4 
  5 int **matrix;
  6 int value = 1;
  7 
  8 void recursion (int row, int col, int len)              // row, col代表本次左上角元素的位置, len为本次矩阵边长
  9 {
 10     if (len <= 0)
 11     {
 12         return;
 13     }
 14     
 15     int i = row, j = col;
 16     while (j < col + len)
 17     {
 18         matrix[i][j++] = value++;
 19     }
 20     
 21     j--;
 22     i++;
 23     
 24     while (i < row + len)
 25     {
 26         matrix[i++][j] = value++;
 27     }
 28     
 29     i--;
 30     j--;
 31     
 32     while (j >= col)
 33     {
 34         matrix[i][j--] = value++;
 35     }
 36     
 37     j++;
 38     i--;
 39     
 40     while (i > row)
 41     {
 42         matrix[i--][j] = value++;
 43     }
 44     
 45     i++;
 46     j++;
 47     
 48     recursion(i, j, len - 2);
 49 }
 50 
 51 void no_recursion ( int n )                    // n为整个矩阵的边长
 52 {    
 53     int i, j, len, col, row;
 54     for (i = 0, j = 0, len = n; len > 0; )
 55     {
 56         row = i;
 57         col = j;
 58         
 59         while (j < col + len)
 60         {
 61             matrix[i][j++] = value++;
 62         }
 63         
 64         j--;
 65         i++;
 66         
 67         while (i < row + len)
 68         {
 69             matrix[i++][j] = value++;
 70         }
 71         
 72         i--;
 73         j--;
 74         
 75         while (j >= col)
 76         {
 77             matrix[i][j--] = value++;
 78         }
 79         
 80         j++;
 81         i--;
 82         
 83         while (i > row)
 84         {
 85             matrix[i--][j] = value++;
 86         }
 87         
 88         i++;
 89         j++;
 90         
 91         len = len - 2;
 92     }
 93 }
 94 
 95 int main()
 96 {
 97     int N = 7, i, j;
 98     matrix = (int**) malloc(sizeof(int*) * N);
 99     
100     for (i = 0; i < N; i++)
101     {
102         matrix[i] = (int*) malloc(sizeof(int) * N);
103         memset(matrix[i], 0, sizeof(int) * N);
104     }
105     
106     no_recursion(N);
107     
108     for (i = 0; i < N; i++)
109     {
110         for (j = 0; j < N; j++)
111         {
112             std::cout << matrix[i][j] << ' ';
113         }
114         std::cout << std::endl;
115     }
116     
117     for (i = 0; i < N; i++)
118     {
119         free(matrix[i]);
120     }
121     
122     free(matrix);
123     
124     return 0;
125 }

 

目录
相关文章
|
存储 C语言
用指针处理链表
用指针处理链表
163 3
|
弹性计算 Ubuntu Shell
用1C1G ECS搭建《阿里云大模型高级工程师ACP认证》学习环境
阿里云推出了《[阿里云大模型高级工程师ACP认证》,配套的学习资料较系统性的梳理了提示词、RAG、Agent插件、微调等系列LLM相关知识。推荐大家学习。 该学习课程需要搭建学习环境,可以直接在ECS上构建该环境即可,所需的资源很少,1C1G20G系统盘最低配置即可,本文介绍了详细搭建过程。
|
SQL 关系型数据库 PostgreSQL
PostgreSQL 如何通过身份证号码进行年龄段的统计?
【8月更文挑战第20天】PostgreSQL 如何通过身份证号码进行年龄段的统计?
1000 2
|
12月前
|
SQL 安全 网络安全
网络安全与信息安全:防范措施与加密技术解析
【10月更文挑战第9天】在数字化时代,网络安全与信息安全已成为我们日常生活中不可或缺的一部分。本文将深入探讨网络安全漏洞、加密技术和安全意识等方面的内容,以帮助读者更好地了解和应对网络安全威胁。通过分享相关知识和案例分析,我们希望提高大家对网络安全的认识和重视程度,共同维护一个安全、可靠的网络环境。
804 0
|
SQL Java 数据库连接
17:数据库连接池与Servlet整合-Java Web
17:数据库连接池与Servlet整合-Java Web
373 3
|
11月前
|
安全 网络安全 网络架构
解释子网为零和全一子网:概念、原理与应用
解释子网为零和全一子网:概念、原理与应用
304 1
|
开发框架 人工智能 前端开发
探索移动应用开发的未来之路:跨平台框架与原生系统的融合
本文旨在探讨移动应用开发的新趋势,特别是跨平台框架和原生操作系统之间的相互作用。我们将深入分析Flutter、React Native等流行框架的设计理念,以及它们如何适应不断变化的移动生态系统。文章还将讨论这些技术对开发人员工作流程的影响,并预测未来可能的发展方向。通过具体案例,我们展示了跨平台解决方案在实际应用中的优势和挑战,为读者提供对当前和未来移动应用开发趋势的深刻见解。
205 40
|
PyTorch 算法框架/工具 并行计算
PyTorch 2.2 中文官方教程(二十)(3)
PyTorch 2.2 中文官方教程(二十)
349 0
|
小程序 JavaScript
【微信小程序】之自定义四宫格(不用mp-grids扩展组件实现,这个组件太难用了)
【微信小程序】之自定义四宫格(不用mp-grids扩展组件实现,这个组件太难用了)
在Linux中,什么是 LILO?
在Linux中,什么是 LILO?