总时间限制:
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
#include<math.h>
#include<stdio.h>
#define sf(a) scanf("%d",&a)
#define sfs(a) scanf("%s",a)
#define MAXN 105
int p = 0;
int r,c;
int a[MAXN][MAXN];
int vis[MAXN][MAXN];
// 右,下,左,上 顺时针
//逆时针就是左,下,右,上
const int dr[] = {0,1,0,-1};
const int dc[] = {1,0,-1,0};
//深搜
void dfs(int row,int col){
vis[row][col] = 1;
printf("%d\n",a[row][col]);
if(row+dr[p]<=r&&row+dr[p]>=1&&col+dc[p]<=c&&col+dc[p]>=1&&!vis[row+dr[p]][col+dc[p]]){
dfs(row+dr[p],col+dc[p]);
}else{
++p;
p%=4;
if(row+dr[p]<=r&&row+dr[p]>=1&&col+dc[p]<=c&&col+dc[p]>=1&&!vis[row+dr[p]][col+dc[p]]){
dfs(row+dr[p],col+dc[p]);
}
}
}
int main(){
sf(r); //输入行数
sf(a); //输入列数
for(int i = 1;i<=r;++i){
for(int j = 1;j<=c;++j){
sf(a[i][j]);
}
}
dfs(1,1);
return 0;
}