class Solution {
public int[][] updateMatrix(int[][] mat) {
//首先创建一个和mat大小一样的矩阵dist,初始化dist的值,mat的值如果是0直接为0mat的值如果为1那就设置成无穷大
int length1 = mat.length;
int length2 = mat[0].length;
int[][] dists = new int[length1][length2];
Queue<int[]> queue = new LinkedList<>();
//在这个过程中同时需要将这些节点入队
for(int i = 0;i < length1;i++){
for(int j = 0;j < length2;j++){
if(mat[i][j] == 0){
dists[i][j] = 0;
queue.offer(new int[]{i,j});
}else{
dists[i][j] = Integer.MAX_VALUE;
}
}
}
//接下来需要从队列中取出每一个元素作为起始节点广度优先遍历哪些没有被遍历过的节点
//用于遍历一个元素的上下左右
int[][] dirs = {{-1,0},{1,0},{0,-1},{0,1}};
while(!queue.isEmpty()){
int[] pos = queue.poll();
int dist = dists[pos[0]][pos[1]];
for(int[] dir : dirs){
int r = pos[0] + dir[0];
int c = pos[1] + dir[1];
if((r >= 0 && r < length1) && (c >= 0 && c < length2)){
if(dists[r][c] > dist + 1){
dists[r][c] = dist + 1;
queue.offer(new int[]{r,c});
}
}
}
}
return dists;
}
}
矩阵中的最短距离java实现
最新推荐文章于 2024-07-05 10:58:04 发布