AcWing756.蛇形矩阵
题目
分析
对于这类问题,我们采用dx, dy 方向数组来存储,并且将顺时针方向定义为1,2,3,0
撞墙的情况有两种,一个是出去,一个是走重复的格子

代码
1 #include<iostream> 2 using namespace std; 3 4 const int N = 110; 5 int n,m; 6 int q[N][N]; 7 8 int main(){ 9 cin>> n >> m; 10 11 //定义开始状态,转移增量,方向 12 int x = 0,y = 0; 13 int dx[4] = {-1,0,1,0},dy[4] = {0,1,0,-1}; 14 int d = 1;//表示顺时针的四个方向,开始为1横着走 15 16 17 for(int i = 1;i <= n * m;i++){ 18 q[x][y] = i; 19 20 //更新坐标 21 int a = x + dx[d],b = y + dy[d]; 22 //判断边界,碰撞换方向 23 if(a < 0 || a >= n || b < 0 || b >= m || q[a][b]){ 24 d = (d + 1) % 4; 25 a = x + dx[d],b = y + dy[d]; 26 } 27 x = a, y = b; 28 } 29 30 for (int i = 0;i < n;i++){ 31 for(int j = 0;j < m;j++){ 32 cout << q[i][j]<< " "; 33 } 34 cout<<endl; 35 } 36 }

浙公网安备 33010602011771号