完整代码
一圈一圈的处理
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46#include <bits/stdc++.h> using namespace std; int main(){ int n, m; cin >> n >> m; vector<vector<int>> nums(n, vector<int>(m, 0)); int res = 1; int l = 0, r = m - 1, u = 0, d = n - 1; while(res <= n * m){ //从左到右 for(int i = l; i <= r && res <= n * m; ++i){ nums[u][i] = res; ++res; } //从上到下 for(int i = u + 1; i <= d && res <= n * m; ++i){ nums[i][r] = res; ++res; } //从右到左 for(int i = r - 1; i >= l && res <= n * m; --i){ nums[d][i] = res; ++res; } //从下 到上 for(int i = d - 1; i > u && res <= n * m; --i){ nums[i][l] = res; ++res; } ++l; --r; ++u; --d; } for(int i = 0; i < n; ++i){ for(int j = 0; j < m; ++j){ cout << nums[i][j] << " "; } cout << endl; } return 0; }
另一种写法:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32#include <bits/stdc++.h> using namespace std; const int N = 110; int f[N][N]; int main(){ int n, m; cin >> n >> m; int cnt = 0; int dx[] = {0, 1, 0, -1}; int dy[] = {1, 0, -1, 0};//控制四个方向 for(int k = 1, x = 0, y = 0, d = 0; k <= n * m; ++k){ f[x][y] = k; //遇到了边界 if(x + dx[d] >= n || x + dx[d] < 0 || y + dy[d] >= m || y + dy[d] < 0 || f[x + dx[d]][y + dy[d]]){ d = (d + 1) % 4; } x += dx[d]; y += dy[d]; } for(int i = 0; i < n; ++i){ for(int j = 0; j < m; ++j){ cout << f[i][j] << " "; } cout << endl; } return 0; }
最后
以上就是知性可乐最近收集整理的关于acwing756. 蛇形矩阵的全部内容,更多相关acwing756.内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复