题目:
bfs思路:
感觉bfs还是很容易想到的,首先定义一个双端队列(队列也是可以的~),如果值为2,则入队列,我这里将队列中的元素定义为pair<int,int>。第一个int记录在数组中的位置,即将二维数组映射到一维数组。没明白的小伙伴可以先看看力扣hot---岛屿数量-CSDN博客。第二个int记录这个橘子第几分钟被感染。最后取最大的分钟就可以啦!(还要检查一下是否有没感染到的橘子,在橘子入队列的时候,记得将grid[x][y]改为2就可以记录橘子被感染了)
代码:
C++:
class Solution {
public:int p_x[4]={-1,1,0,0};int p_y[4]={0,0,-1,1};int orangesRotting(vector<vector<int>>& grid) {deque<pair<int,int>> q;int m=grid.size();int n=grid[0].size();int cnt=0;int res=0;//初始化qfor(int i=0;i<m;i++){for(int j=0;j<n;j++){if(grid[i][j]==2){q.push_back({i*n+j,cnt}); //把数组转换成1维,并且记录第几分钟}}}//开始腐烂while(!q.empty()){//popauto temp=q.front();q.pop_front();//腐烂四周int tempx=temp.first/n;int tempy=temp.first%n;int tempcnt=temp.second;//if(grid[tempx][tempy]==2){continue;}for(int k=0;k<4;k++){int x=tempx+p_x[k];int y=tempy+p_y[k];if(x>=0 && x<m && y>=0 && y<n){if(grid[x][y]==0||grid[x][y]==2){continue;}grid[x][y]=2;q.push_back({x*n+y,tempcnt+1});cnt=max(cnt,tempcnt+1);}}}for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(grid[i][j]==1){return -1;}}}return cnt;}
};
Python代码就不附啦,因为和今天发布的力扣---接雨水---单调队列-CSDN博客Python代码很像哦