递归和非递归方法打印螺旋矩阵

来源:互联网 发布:韩剧秘密知乎 编辑:程序博客网 时间:2024/06/05 05:49

之前考虑的是方阵,现在是矩阵

#include "stdio.h"#include <iostream>void SetMatrix1(int **matrix, int x, int y, int k) {int start=1;if(x==y)matrix[x/2][y/2]=x*x;for(int d=0;d<k;d++){for (int i = d; i < y-1-d; i++)          //上部 matrix[d][i] = start++;for (int j = d; j < x-1-d; j++)          // 右边matrix[j][y-1-d] = start++;for (int m = y-1-d; m >d ;m--)              // 底部 matrix[x-1-d][m] = start++;for (int n = x-1-d; n > d; n--)              // 左边 matrix[n][d] = start++;}}void SetMatrix(int **matrix, int x, int y,int d,int k,int start) {if(d==k){if(x==y)matrix[x/2][y/2]=x*x;return;}for (int i = d; i < y-1-d; i++)          //上部 matrix[d][i] = start++;for (int j = d; j < x-1-d; j++)          // 右边matrix[j][y-1-d] = start++;for (int m = y-1-d; m >d ;m--)              // 底部 matrix[x-1-d][m] = start++;for (int n = x-1-d; n > d; n--)              // 左边 matrix[n][d] = start++;SetMatrix(matrix,x,y,d+1,k,start);}void main() {int i, j;int m,n;scanf("%d%d", &m,&n);int **matrix; //螺旋矩阵(二维数组)matrix = (int **)malloc(m * sizeof(int *)); //为矩阵分配空间for (i = 0; i<m; i++)matrix[i] = (int *)malloc(n * sizeof(int));for(i = 0; i < m; i++)for (j = 0; j < n; j++)matrix[i][j]=0;int max=(m>n)?m:n;SetMatrix(matrix, m, n,0,max/2,1);//打印螺旋矩阵for(i = 0; i < m; i++) {for (j = 0; j < n; j++)printf("%d ", matrix[i][j]);printf("\n");}}


原创粉丝点击