zoukankan      html  css  js  c++  java
  • dfs-矩阵题目

    40. 顺时针打印矩阵

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

    class Solution {
    public:
        vector<int> res;
        vector<vector<int> > mp;
        vector<vector<bool> > vis;
        int m, n;
        void dfs(int i, int j,int flag){
            if(i < 0 || i >= m || j < 0 || j >= n || vis[i][j]) return;
            vis[i][j] = 1;
            res.push_back(mp[i][j]);
            switch(flag){
                case 0: if(j < n-1 && !vis[i][j+1])
                        dfs(i,j+1,0);
                    else dfs(i+1,j,1); break;
                case 1: if(i < m-1 && !vis[i+1][j])
                         dfs(i+1,j,1);
                    else dfs(i,j-1,2); break;
                case 2:if(j >= 1 && !vis[i][j-1])
                    dfs(i,j-1,2);
                    else dfs(i-1,j,3);break;
                case 3:if(i >= 1 && !vis[i-1][j])
                    dfs(i-1,j,3); else dfs(i,j+1,0);break;
            }
        }
        vector<int> printMatrix(vector<vector<int> > matrix) {
            mp = matrix;
            m = matrix.size();
            if(m == 0) return res;
            n = matrix[0].size();
            vis.resize(m);
            for(int i = 0; i < m; i++)
                vis[i].resize(n,0);
            dfs(0,0,0);
            return res;
        }
    };

    yxc的做法:定义四个方向以及改变方向的技巧:

    class Solution {
    public:
        vector<int> printMatrix(vector<vector<int>>& matrix) {
            vector<int> res;
            if (matrix.empty()) return res;
            int n = matrix.size(), m = matrix[0].size();
            vector<vector<bool>> st(n, vector<bool>(m, false));
            int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
            int x = 0, y = 0, d = 1;
            for (int k = 0; k < n * m; k ++ )
            {
                res.push_back(matrix[x][y]);
                st[x][y] = true;
    
                int a = x + dx[d], b = y + dy[d];
                if (a < 0 || a >= n || b < 0 || b >= m || st[a][b])
                {
                    d = (d + 1) % 4;
                    a = x + dx[d], b = y + dy[d];
                }
                x = a, y = b;
            }
            return res;
        }
    };
    
    作者:yxc
    链接:https://www.acwing.com/solution/AcWing/content/748/
    来源:AcWing
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    今天看了几个小时的微信小程序说说心得体会
    关于wordpress中的contact form7和WP Mail SMTP的一些设置
    关于163发邮件报错535 Error:authentication failed解决方法
    Numpy 基本除法运算和模运算
    基本的图像操作和处理
    Python中flatten用法
    media
    TensorFlow模型保存和提取方法
    docker 默认用户和密码
    Windows安装TensorFlow
  • 原文地址:https://www.cnblogs.com/Aliencxl/p/12336297.html
Copyright © 2011-2022 走看看