2486 小b和矩阵
题目
顺时针螺旋输出矩阵
分析
水题,定义好顺时针方向顺序,每次dfs从上次的方向开始走。
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define d(x) cout << (x) << endl
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
const int N = 5e2 + 10;
int m, n, cnt;
int a[N][N];
int dir[4][2] = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; //顺时针方向
int vis[N][N]; //访问数组
void dfs(int x, int y, int d) //访问到(x,y),从d方向来
{
printf("%d ", a[x][y]);
for (int i = 0; i < 4; i++){
int tx = x + dir[(d + i)%4][0];
int ty = y + dir[(d + i)%4][1];
if (!vis[tx][ty] && tx <= m && tx >= 1 && ty <= n && ty >= 1){
vis[tx][ty] = 1;
dfs(tx, ty, d+i);
}
}
}
int main()
{
scanf("%d%d", &m, &n);
for(int i = 1; i <= m; i++){
for(int j = 1; j <= n; j++){
scanf("%d", &a[i][j]);
}
}
vis[1][1] = 1;
dfs(1, 1, 0);
return 0;
}