二维数组回形遍历
http://noi.openjudge.cn/ch0108/23/
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按回形从外向内顺时针顺序遍历整个数组。如图所示:
输入输入的第一行上有两个整数,依次为row和col。
余下有row行,每行包含col个整数,构成一个二维整数数组。
(注:输入的row和col保证0 < row < 100, 0 < col < 100)输出按遍历顺序输出每个整数。每个整数占一行。样例输入
4 4 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
样例输出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
代码如下:
1 #include <stdio.h> 2 #define maxN 101 3 int main(int argc, char *argv[]) 4 { 5 int row,col,i,j,k; 6 int a[maxN][maxN]; 7 int count; 8 9 scanf("%d%d",&row,&col); 10 for(i=0;i<row;i++) 11 { 12 for(j=0;j<col;j++) 13 { 14 scanf("%d",&a[i][j]); 15 } 16 } 17 18 if(row==1)//只有一行 19 { 20 i=0;j=0; 21 for(k=1;k<=col;k++) 22 { printf("%d\n",a[i][j]);j++;} 23 } 24 else if(col==1)//只有一列 25 { 26 i=0;j=0; 27 for(k=1;k<=row;k++) 28 { printf("%d\n",a[i][j]);i++;} 29 } 30 else 31 { 32 i=0;j=0; 33 count=row*col; 34 while(count>0) 35 { 36 for(k=1;k<col;k++) 37 { count--; printf("%d\n",a[i][j]);j++;} //输出一个环的上面那一条边 38 39 for(k=1;k<row;k++) 40 { count--; printf("%d\n",a[i][j]);i++;} //输出一个环的右侧那一条边 41 42 for(k=1;k<col;k++) 43 { count--; printf("%d\n",a[i][j]);j--;} //输出一个环的下面那一条边 44 45 for(k=1;k<row;k++) 46 { count--; printf("%d\n",a[i][j]);i--;} //输出一个环的左侧那一条边 47 48 i++; 49 j++; 50 row-=2; 51 col-=2; 52 if(row==1)//只剩下一行 53 { 54 for(k=1;k<=col;k++) 55 { count--; printf("%d\n",a[i][j]);j++;} 56 } 57 else if(col==1)//只剩下一列 58 { 59 for(k=1;k<=row;k++) 60 { count--; printf("%d\n",a[i][j]);i++;} 61 } 62 } 63 } 64 return 0; 65 }