首页 > 其他分享 >【BFS】LeetCode 542. 01 矩阵

【BFS】LeetCode 542. 01 矩阵

时间:2023-01-15 15:33:53浏览次数:72  
标签:542 01 mat int currentPos BFS new nextX nextY

题目链接

542. 01 矩阵

思路

题目让求1到0的距离,其实可以转换成求0到1的距离,将所有的0作为源结点放入队列进行BFS。

BFS本质上就是从源点开始的搜索算法,本题只不过是所有的0都是源点,即多源点,将所有源点放入队列就行。

如果0的旁边没有1,则不会对其周围进行访问;如果0的周围有1,则会访问1的坐标,并修改其中的值为距离。

代码

class Solution {
    public int[][] updateMatrix(int[][] mat) {
        Queue<Pair<Integer, Integer>> queue = new LinkedList<>();
        boolean[][] visited = new boolean[mat.length][mat[0].length];

        for(int i = 0; i < mat.length; i++){
            for(int j = 0; j < mat[i].length; j++){
                if(mat[i][j] == 0){
                    queue.offer(new Pair<>(i, j));
                    visited[i][j] = true;
                }
            }
        }

        int[] dx = new int[]{1, 0, -1, 0};
        int[] dy = new int[]{0, 1, 0, -1};
        while(!queue.isEmpty()){
            Pair<Integer, Integer> currentPos = queue.remove();
            for(int i = 0; i < 4; i++){
                int nextX = currentPos.getKey() + dx[i];
                int nextY = currentPos.getValue() + dy[i];
                if(valid(nextX, nextY, visited, mat)){
                    mat[nextX][nextY] = mat[currentPos.getKey()][currentPos.getValue()] + 1;
                    queue.offer(new Pair<>(nextX, nextY));
                    visited[nextX][nextY] = true;
                }
            }
        }

        return mat;
    }

    boolean valid(int nextX, int nextY, boolean[][] visited, int[][] mat){
        return (
                0 <= nextX && nextX < mat.length && 0 <= nextY && nextY < mat[0].length &&
                        !visited[nextX][nextY] && mat[nextX][nextY] != 0
                );
    }
}

标签:542,01,mat,int,currentPos,BFS,new,nextX,nextY
From: https://www.cnblogs.com/shixuanliu/p/17053579.html

相关文章

  • 【题解】P5397 [Ynoi2018] 天降之物
    码力人的甜品,口嗨者的末路。感觉手牵手那个题才是第四分块正体,这个不如叫最初根号分治。思路根号分治。对于每个值,把它们分成出现大于根号次和小于等于根号次两类。先......
  • Canvas 图形-01:Canvas介绍、Canvas API
    Canvas介绍、CanvasAPICanvas介绍Canavs是HTML5规范的一部分,需要使用<canvas></canvas>在HTML中标注使用。实际操作的是canvas的context。Context2D是基于状态的,拥有......
  • SQL238 将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005
    SQL238将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005题目描述将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实......
  • 【BFS】LeetCode 1091. 二进制矩阵中的最短路径
    题目链接1091.二进制矩阵中的最短路径思路BFS找最短路模板题代码classSolution{publicintshortestPathBinaryMatrix(int[][]grid){if(grid[0][......
  • POI2015
    KUR首先设\(z=ai+b\),考虑求出\(z\)的范围。假设序列的第\(j\)位为\(1\),则\(z+a(j-1)\geqp\),即将\([p,n)\)区间向左循环位移\(a(j-1)\),然后对所有这样的区间取交。由于循......
  • 【题解】P5692 [MtOI2019]手牵手走向明天
    春节前做大分块是什么奇妙传统吗……这个题好想是好想,但是写起来就是另外一回事了……思路分块。第四分块加强版。区间查询,根号分治做法寄了。看到合并颜色可以想到......
  • x210-2023-01-14
    1、尝试过在.c文件中补充void__aeabi_unwind_cpp_pro(void){}空函数,但是无效,后采用编译.o过程加入-nostdlib可以成功。 2、前一次编译出错,已经生成错误的.o文件没有mak......
  • 永恒之蓝(MS17-010)的复现
     漏洞介绍:MS17-010又称永恒之蓝漏洞,利用Windows系统的SMB漏洞可以获取系统最高权限。最有名的安全事件就是不法分子通过改造“永恒之蓝”制作了wannacry勒索病毒。攻击......
  • 静默安装Oracle11gR2 [FATAL] [INS-32015]报错
    Centos6.5静默安装oracle11gR2[oracle@oracledbdatabase]$./runInstaller-silent-force-responseFile/opt/database/response/db_install.rspStartingOracleU......
  • 怎么取消 Windows Server 2012 RDP 限制每个用户只能进行一个会话
    在WindowsServer2008/2008R2上,如果希望多个远程用户使用同一个账号同时访问服务器的RemoteDesktop(RDP),只需通过管理工具-远程桌面下的“远程桌面会话主机配置”进行......