概述
完整代码
一圈一圈的处理
#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;
}
另一种写法:
#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. 蛇形矩阵所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复