笔试题里螺旋矩阵的C++简单实现

最近笔试时,被人问道螺旋矩阵的输出问题,当时紧张,想的不是很透彻,回去研究一番,实现如下:

比如N=4的矩阵:

1    2   3    4      ----a排

12 13 14  5

11 16 15  6

10  9   8    7 -------c排

  |                |

  d排           b排 

首先确定的是需要一个二维数组ar[N][N]接收,N=4,则有两圈,外一圈从1--12;内一圈从13-16;很明显,可以设置一个循环:for count=0:N/2控制圈数;

对于每一圈而言,又是a,b,c,d,四个方向,比如先接收最外圈a排,可以用一个循环(j=0;j

const int N=5;//定义矩阵大小
int main(){
int ar[N][N]={0};//用二维数组承接
int i=0,j=0;
int start=1;
int t=N;
for(int count=0;countcount;j--)
   ar[i][j]=start++;//c
for(i=t-1;i>count;i--)
   ar[i][j]=start++;//d


t--;i++;start-=1;//进入下一圈
}//每圈对应a,b,c,d四排
if(N%2!=0){
ar[i][j+1]=start+1;}//如果N不是偶数时,需要加上最后一个数字
cout<<"inf: "<


遍历实现:

void setmatrix(int **matrix,int x,int y,int start,int n){
if(n<=0)return;
int i,j;
if(n==1){matrix[x][y]=start;return;}
for(i=x;ix;i--)matrix[y+n-1][i]=start++;//底部
for(j=y+n-1;j>y;j--)matrix[j][x]=start;//左
setmatrix(matrix,x+1,y+1,start,n-2);//瘦了两圈
}


结果如图:

笔试题里螺旋矩阵的C++简单实现_第1张图片

你可能感兴趣的:(C/C++语言区)