01 矩阵
给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。
两个相邻元素间的距离为 1 。
示例 1:
输入:
0 0 0
0 1 0
0 0 0
输出:
0 0 0
0 1 0
0 0 0
思路+代码+注释:
public int[][] updateMatrix(int[][] matrix) {
/*
思路:遍历数字,如果数字是1,那么从1进行bfs上下左右一圈一圈的搜索,如果全是1那么长度+1,只要有0那么搜索结束长度就是离0最近长度
*/
int row=matrix.length;
int col=matrix[0].length;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (matrix[i][j]==1)
{
bfs(matrix,i,j,row,col);
}
}
}
return matrix;
}
private void bfs(int[][] matrix,int i,int j,int n,int m)
{
LinkedList<int[]> linkedList=new LinkedList<>();
int[] ints=new int[2];
ints[0]=i;
ints[1]=j;
linkedList.add(ints);
int curSize=0;
int len=0;
while ((curSize=linkedList.size())>0)
{
boolean flag=false;
for (int k = 0; k < curSize; k++) {
int[] curArr=linkedList.poll();
int row=curArr[0];
int col=curArr[1];
if (matrix[row][col]==0)
{
flag=true;
break;
}else {
if (row-1>-1)
{
int[] ints2=new int[2];
ints2[0]=row-1;
ints2[1]=col;
linkedList.add(ints2);
}
if (row+1<n)
{
int[] ints2=new int[2];
ints2[0]=row+1;
ints2[1]=col;
linkedList.add(ints2);
}
if (col-1>-1)
{
int[] ints2=new int[2];
ints2[0]=row;
ints2[1]=col-1;
linkedList.add(ints2);
}
if (col+1<m)
{
int[] ints2=new int[2];
ints2[0]=row;
ints2[1]=col+1;
linkedList.add(ints2);
}
}
}
if (flag)
{
break;
}
curSize=linkedList.size();
len++;
}
matrix[i][j]=len;
}