题解 | #牛群的活动区域#

牛群的活动区域

https://www.nowcoder.com/practice/eabeca0c6e944a618f8adfed128d847e

#include <iterator>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param board char字符型vector<vector<>> 
     * @return char字符型vector<vector<>>
     */

    vector<pair<int,int>> v = {{-1,0},{1,0},{0,-1},{0,1}};

    void dfs(vector<vector<char>> board, int i, int j,vector<vector<bool>>& flag)
    {
        int m = board.size();
        int n = board[0].size();
        // 越界
        if(i<0||i>=m||j<0||j>=n)
            return;

        if(i>=0&&i<m&&j>=0&&j<n && board[i][j]=='B')
        {
            // 将当前位置的字符变为'A'
            board[i][j] = 'A';
            flag[i][j] = true;
        }
        
        // 遍历当前位置的四个方向
        for(auto [t_1,t_2]:v)
        {
            int t_i = i+t_1;
            int t_j = j+t_2;

            if(t_i>=0&&t_i<m&&t_j>=0&&t_j<n && board[t_i][t_j]=='B')
                dfs(board, t_i, t_j, flag);
        }

        return;
    }

    vector<vector<char> > solve(vector<vector<char> >& board) {
        // write code here

        int m = board.size();
        int n = board[0].size();
        
        // 对每个位置进行判断
        vector<vector<bool>> flag(m,vector<bool>(n,false));

        for(int i=0; i<m; ++i)
        {
            for(int j=0; j<n; ++j)
            {
                // 题目中其实已经给出思路。我们可以遍历边界,当遇到B字符时,就是递归的入口。递归时就找到与之相邻的没有被访问过的B字符位置即可
                if((i==0 || i==m-1 || j==0 || j==n-1) && board[i][j]=='B')
                {
                    // 递归,标记这部分区域
                    dfs(board,i,j,flag);
                }
            }
        }

        for(int i=0; i<m; ++i)
        {
            for(int j=0; j<n; ++j)
            {
                // 题目中其实已经给出思路。我们可以遍历边界,当遇到B字符时,就是递归的入口。递归时就找到与之相邻的没有被访问过的B字符位置即可
                if(i>0&&i<m-1&&j>0&&j<n-1 && board[i][j]=='B' && !flag[i][j])
                {
                    board[i][j] = 'A';
                }
            }
        }

        return board;
    }
};

全部评论

相关推荐

预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
投递华为等公司10个岗位 >
点赞 评论 收藏
分享
Hello_WordN:咱就是说,除了生命其他都是小事,希望面试官平安,希望各位平时也多注意安全
点赞 评论 收藏
分享
挣K存W养DOG:他真的很中意你,为什么不回他
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务