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

牛群的活动区域

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

知识点:广度优先搜索

题目要求要将被包围的B转换为A,边界处不属于被包围的范围,故我们可以从边界出发,向内遍历所有的B并标记,表明被标记的B不会被转换成A。具体来说,将四个边界的B入队,然后依次出队,向四个方向进行广度优先搜索,将其依次标记并入队,直至队列中没有剩余元素,也就标记了所有的与边界相通的B。

Java题解如下

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param board char字符型二维数组 
     * @return char字符型二维数组
     */
    public char[][] solve (char[][] board) {
        // write code here
        int m = board.length, n = board[0].length;
        int[][] dirs = new int[][]{{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
        boolean[][] flag = new boolean[m][n];
        Queue<int[]> queue = new ArrayDeque<>();
        for(int i = 0; i < m; i++) {
            if(board[i][0] == 'B') {
                queue.offer(new int[]{i, 0});
            }
            if(board[i][n - 1] == 'B') {
                queue.offer(new int[]{i, n - 1});
            }
        }
        for(int i = 0; i < n; i++) {
            if(board[0][i] == 'B') {
                queue.offer(new int[]{0, i});
            }
            if(board[m - 1][i] == 'B') {
                queue.offer(new int[]{m - 1, i});
            }
        }
        while(!queue.isEmpty()) {
            int[] poll = queue.poll();
            int x = poll[0], y = poll[1];
            flag[x][y] = true;
            for(int[] dir: dirs) {
                int nx = x + dir[0], ny = y + dir[1];
                if(nx >= 0 && nx < m && ny >= 0 && ny < n && !flag[nx][ny] && board[nx][ny] == 'B') {
                    queue.offer(new int[]{nx, ny});
                }
            }
        }
        for(int i = 0; i < m; i++) {
            for(int j = 0; j < n; j++) {
                if(!flag[i][j] && board[i][j] == 'B') {
                    board[i][j] = 'A';
                }
            }
        }
        return board;
    }
}

全部评论

相关推荐

01-14 12:08
门头沟学院 Java
神哥了不得:(非引流)1.既然发出来了简历,就稍微提一点点小建议,确实简历很不错了,练手项目可以换一些质量高的,工作内容,可以加上一些量化指标,比如第一条系统响应速度由多少变成多少,减少了百分之多少,第4条就很不错。2.广投,年前实习招募比较少了
点赞 评论 收藏
分享
2024-12-23 11:36
中南大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务