目录
牛客_腐烂的苹果(多源 BFS)
题目解析
C++代码
Java代码
牛客_腐烂的苹果(多源 BFS)
腐烂的苹果_牛客题霸_牛客网
题目解析
多源 BFS 问题,固定套路,BFS学习 :Offer必备算法28_多源BFS_四道力扣题详解(由易到难)_bfs算法题力扣-CSDN博客
C++代码
class Solution
{
int m = 0, n = 0;
int dx[4] = {0, 0, 1, -1};
int dy[4] = {1, -1, 0, 0};
bool vis[1010][1010] = { 0 };
public:
int rotApple(vector<vector<int> >& grid)
{
m = grid.size(), n = grid[0].size();
queue<pair<int, int>> q;
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
if(grid[i][j] == 2)
q.push({i, j});
int ret = 0;
while(q.size())
{
int sz = q.size();
ret++;
while(sz--)
{
auto [a, b] = q.front();
q.pop();
for(int i = 0; i < 4; i++)
{
int x = a + dx[i], y = b + dy[i];
if(x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == 1
&& !vis[x][y])
{
vis[x][y] = true;
q.push({x, y});
}
}
}
}
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
if(grid[i][j] == 1 && !vis[i][j])
return -1;
return ret - 1;
}
};
Java代码
import java.util.*;
public class Solution
{
int[] dx = {0, 0, 1, -1};
int[] dy = {1, -1, 0, 0};
public int rotApple (ArrayList<ArrayList<Integer>> grid)
{
int m = grid.size();
int n = grid.get(0).size();
boolean[][] vis = new boolean[m][n];
Queue<int[]> q = new LinkedList<>();
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
if(grid.get(i).get(j) == 2)
{
q.add(new int[]{i, j});
}
}
}
int ret = 0;
while(!q.isEmpty())
{
int sz = q.size();
while(sz-- != 0)
{
int[] t = q.poll();
int a = t[0], b = t[1];
for(int i = 0; i < 4; i++)
{
int x = a + dx[i], y = b + dy[i];
if(x >= 0 && x < m && y >= 0 && y < n && vis[x][y] == false
&& grid.get(x).get(y) == 1)
{
vis[x][y] = true;
q.add(new int[]{x, y});
}
}
}
ret++;
}
// 判断剩余的苹果
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
{
if(grid.get(i).get(j) == 1 && !vis[i][j])
{
return -1;
}
}
}
return ret - 1;
}
}