二维数组环形打印,亲自调试

/*先把数据依照打印格式打印到二维数组中,然后输出二维数组就可以

 *时间复杂度 O(N*M)

 *空间复杂度O(N*M)

*/


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int  input(void);
void contral(int **arry,int col,int row);
void set_value(int**a,int col,int row, int start);
void print(int **arry,int col,int row);

int main(void)
{
    int col,row;
    int **a;
    int i;
    printf("input the col,row:");
    scanf("%d%d",&col,&row); 
    //申请二维数组
    a=(int **)malloc(sizeof(int*)*col);
    for(i=0;i<col;i++)
      a[i]=(int *)malloc(sizeof(int)*row);
      
    contral(a,col,row);
    print(a,col,row);
    return 0;
}

void contral(int **arry,int col,int row)
{
      int start=0;
      while(col>start*2&&row>start*2)
      {
         set_value(arry,col,row,start);
         start++;
      } 
}
void set_value(int**a,int col,int row, int start)
{
  int endX=row-1-start;
  int endY=col-1-start;
  int i;
  static int temp=1;
  //第一行,从右到左
  for(i=start;i<=endX;i++)
    {
          a[start][i]=temp;
          temp++;
    }
  //第二列,从上到下
  if(start<endY)
  {
     for(i=start+1;i<endY;i++)
      {
          a[i][endX]=temp;
          temp++;  
      } 
  }
  //打印第三行 从左到右
  if(start<endX&&start<endY)
  {
     for(i=endX;i>=start;i--)
      {
            a[endY][i]=temp;
            temp++;
      } 
  }
  //打印第四列,从下到上
  if(start<endX&&start<endY-1)
  {
     for(i=endY-1;i>=start+1;i--)
     {
       a[i][start]=temp;
       temp++;
     }
  }  
}
void print(int **arry,int col,int row)
{
   int i,j;
   for(i=0;i<col;i++)
   {
     for(j=0;j<row;j++)
      {
         printf("%4d ",arry[i][j]);
      }
      printf("
");
   }
}
程序执行结果:

[trageday@lei-yum code_test]$ gcc -o print_cir_arry print_cir_arry.c
[trageday@lei-yum code_test]$ ./print_cir_arry 
input the col,row:5 5
   1    2    3    4    5 
  16   17   18   19    6 
  15   24   25   20    7 
  14   23   22   21    8 
  13   12   11   10    9 



原文地址:https://www.cnblogs.com/yfceshi/p/7080786.html