遍历二维数组(从外向内绕圈)

遍历一个二维数组(从外向内绕圈)

//没有注释,但能很轻松看懂
比如数组
1 2 3
4 5 6
7 8 9
输出结果为1 2 3 6 9 8 7 4 5
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
void function(int** a,int m1,int m2,int n1,int n2,int m,int n)
{
int i;
if(m1>m2||n1>n2)
{
return;
}
if(m1==m2)
{
for(i=n1;i<=n2;i++)
{
printf("%d\t",a[m1*n+i]);
}
return;
}
else if(n1==n2)
{
for(i=m1;i<m2;i++)
{
printf("%d\t",a[i*n+n1]);
}
return;
}
else
{
for(i=n1;i<=n2;i++)
{
printf("%d\t",a[m1*n+i]);
}
for(i=m1+1;i<=m2;i++)
{
printf("%d\t",a[i*n+n2]);
}
for(i=n2-1;i>=n1;i--)
{
printf("%d\t",a[m2*n+i]);
}
for(i=m2-1;i>=m1+1;i--)
{
printf("%d\t",a[i*n+n1]);
}
function(a,m1+1,m2-1,n1+1,n2-1,m,n);
}
}
void random_array(int** a,int m,int n)
{
int i,j;
srand(time(0));
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
a[i*n+j]=rand()%100+1;
}
}
}
void print_array(int** a,int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",a[i*n+j]);
}
printf("\n");
}
}
int main()
{
int m,n;
int** a;
printf("Please input m and n:");
scanf("%d%d",&m,&n);
a=(int **)malloc(sizeof(int)*m*n);
random_array(a,m,n);
printf("The array is\n");
print_array(a,m,n);
printf("The array visit is\n");
function(a,0,m-1,0,n-1,m,n);
printf("\n");
free(a);
return 0;
}

你可能感兴趣的:(J#)