zoukankan      html  css  js  c++  java
  • 【数据结构】01矩阵 01 Matrix

    01矩阵 01 Matrix

    在一个由 0和1 组成的矩阵mat,输出一个大小相同的矩阵,其中每个格子是mat中对应位置元素到最近的0的距离。

    两个相邻元素间的距离是1.

    mat = [[0,0,0],[0,1,0],[0,0,0]]
    out:[[0,0,0],[0,1,0],[0,0,0]]
    

    思路

    mat是一个m*n阶矩阵,要求输出相同的矩阵,矩阵的每一个元素,代表mat中对应元素距离0元素的最近距离。

    使用BFS,将mat所有的0元素坐标信息全部入队。并且使用一个visit二维数组记录结果,-1代表未访问过,0代表访问过并且距离最小是0.

    在进行BFS过程中,每出队一个坐标,就对该坐标进行方向扩展,即寻找附近的元素坐标。如果访问过,就标记visit数组的值,并将该坐标信息+visit数组的值入队。

      public class Data{
            public int i;
            public int j;
            public int val;
            Data(int x, int y,int v){
                i =x;
                j =y;
                val= v;
            }
        }
        public int[][] updateMatrix(int[][] mat) {
            int n = mat.length;
            int m = mat[0].length;
            Queue<Data> queue = new LinkedList<Data>();
            int[][] visit = new int[n][m];
            //queue
            //Visit[][]
            initqueue(mat,n,m,queue,visit);
            int[][] dir = {{1,0},{-1,0},{0,-1},{0,1}};
            while(!queue.isEmpty()){
                Data t = queue.peek();
                for(int k =0;k<4;k++){
                    int x = t.i+dir[k][0];
                    int y = t.j+dir[k][1];
                    if(x<0||y<0||x>n-1||y>m-1){
                        continue;//out of board
                    }
                    if(visit[x][y]!=-1){
                        continue;// this visited
                    }
                    visit[x][y] = t.val+1;
                    queue.offer(new Data(x,y,visit[x][y]));
                }
                queue.poll();
            }
            return visit;
        }
        public void initqueue(int[][] mat,int n,int m,Queue queue,int[][] visit){
            for(int i =0;i<n;i++){
                for(int j =0;j<m;j++){
                    if(mat[i][j]==0){
                        queue.offer(new Data(i,j,0));
                        visit[i][j]=0;
                    }
                    else{
                        visit[i][j]=-1;
                    }
                }
            }
        }
    

    Tag

    BFS

  • 相关阅读:
    AcWing 204. 表达整数的奇怪方式 / Strange Way To Express Integers
    Codeforces Edu Round 67 A-C + E
    Codeforces Edu Round 66 A-E
    Codeforces Edu Round 65 A-E
    Codeforces Edu Round 64 A-D
    Codeforces Edu Round 63 A-E
    Codeforces Edu Round 62 A-E
    Codeforces Edu Round 61 A-C + F
    python 线程池和锁
    python 线程
  • 原文地址:https://www.cnblogs.com/dreamtaker/p/15368915.html
Copyright © 2011-2022 走看看