我是靠谱客的博主 知性可乐,最近开发中收集的这篇文章主要介绍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. 蛇形矩阵所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部