我是靠谱客的博主 知性可乐,这篇文章主要介绍acwing756. 蛇形矩阵,现在分享给大家,希望可以做个参考。

在这里插入图片描述

完整代码

一圈一圈的处理

#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.内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(110)

评论列表共有 0 条评论

立即
投稿
返回
顶部