LC994 多起点的bfs

int orangesRotting(vector<vector<int>>& grid) {
    int dx[4] = {1, 0, 0, -1};
    int dy[4] = {0, 1, -1, 0};
    int time[15][15]; 
    queue<pair<int,int>> q;
    int n=grid.size();
    int m=grid[0].size();
    
    /*
        时间问题:每次新腐烂橘子时间是上一次传染给他的时间+1
        所以吧腐烂橘子时间设为0
    */ 
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(grid[i][j]==0){
                time[i][j]=-1;
            }else{
                time[i][j]=0;
                if(grid[i][j]==2){
                    q.push({i,j});
                }
                
            }
        }
    }
    while(!q.empty()){
        int x=q.front().first;
        int y=q.front().second;
        q.pop();
        for(int i=0;i<4;i++){
            int nx=x+dx[i];
            int ny=y+dy[i];
            //多个腐烂橘可能都会到达同一点,取时间最少的 
            if(nx>=0&&nx<n&&ny>=0&&ny<m&&grid[nx][ny]==1){
                cout<<nx<<" "<<ny<<endl;
               //int t=time[x][y]+1;
                time[nx][ny]=time[x][y]+1;
                grid[nx][ny]=2;
                q.push({nx,ny});	
            }
        }
    }
     
    int ans=0; 
    for(int i=0;i<n;i++){                
        for(int j=0;j<m;j++){
            if(grid[i][j]==1){
                return -1;
            }
            //cout<<time[i][j]<<" ";
           ans=max(ans,time[i][j]);
        }
        //cout<<endl;
        
    }
    return ans;
};
posted @   lwx_R  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示