最简单的想法(从每个打印的点看起)
关于这个问题,不管是顺时针还是逆时针,我们都可以把他看作四个动作(函数),向右,向下,向左,向上。初次之外,我们还要知道,每次做动作的起点以及打印的个数(界限),由此就可以想象出整个函数的结构。
int stx=0,sty=0;//起点X坐标,起点Y坐标,
int maxux=col-1,maxuy=row-1;//最大未打印X坐标(列,有效下标) ,最大未打印Y坐标(行,有效下标)
minux=0,minuy=0;//最小未打印X坐标 ,最小未打印Y坐标
void Move_Right(int (*arr)[4],int maxux,int* minuy,int *stx,int sty);
void Move_Down(int (*arr)[4],int* maxux,int maxuy,int stx,int *sty);
void Move_Left(int (*arr)[4],int minux,int* maxuy,int *stx,int sty);
void Move_Up(int (*arr)[4],int* minux,int minuy,int stx,int *sty);
/*关于函数的参数,第一个是需要打印的二维数组,第二个是列的边界,第三个是行的边界,第四第五是打印
起始的坐标,其中带*的是需要在函数执行完修改的值*/
这四个函数的基本思路是一样的,我们就其中一个函数来详细讲解
void Move_Right(int (*arr)[