01矩阵

01矩阵

问题

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。两个相邻元素间的距离为 1。

方法

将找每个元素距离最近的0转换为从0向外找1,因为如果该位置元素为0,那么他到0的距离就是0,所以找到1的距离就是1到0的距离。用广度优先算法来寻找最短距离。

 //广度优先算法 ---从0向四周搜索1,就是最短路径
     public int[][] updateMatrix(int[][] matrix) {
      Queue<int[]> queue=new LinkedList<int[]>();
      int n=matrix.length;
      int m=matrix[0].length;
      for(int i=0;i<n;i++)
       for(int j=0;j<m;j++) {
        if(matrix[i][j]==1) {
         matrix[i][j]=Integer.MAX_VALUE;//标记没有走过
        }
        else
         queue.offer(new int[] {i,j});//将0入队伍
       }
       int[] x1=new int[] {1,-1,0,0};//定义四个方向
      int[] y1=new int[] {0,0,1,-1};
      while(!queue.isEmpty())
      {
       int[] num=queue.poll();//出队伍
       for(int i=0;i<4;i++) {     
       int nx=num[0]+x1[i];
       int ny=num[1]+y1[i];//将当前位置向前/后/左/右走
       if(nx>=0&&nx<=n&&ny>=0&&ny<=m&&matrix[nx][ny]==Integer.MAX_VALUE) {//找到了未标记的1,其距离就是上一个位置的数加1
        matrix[nx][ny]=matrix[num[0]][num[1]]+1;
        queue.offer(new int[] {nx,ny});
        }
       
       }
      }
      return matrix;
      }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值