洪水问题(bfs应用)

题目描述

在一个nxm矩阵形状的城市里爆发了洪水,洪水从(0,0)的格子流到这个城市,在这个矩阵中有的格子有一些建筑,洪水只能在没有建筑的格子流动。请返回洪水流到(n - 1,m - 1)的最早时间(洪水只能从一个格子流到其相邻的格子且洪水单位时间能从一个格子流到相邻格子)。

给定一个矩阵map表示城市,其中map[i][j]表示坐标为(i,j)的格子,值为1代表该格子有建筑,0代表没有建筑。同时给定矩阵的大小nm(n和m均小于等于100),请返回流到(n - 1,m - 1)的最早时间。保证洪水一定能流到终点。

class Flood {
public:
    int visited[102][102]={0};
    int offset[4][2]={1,0,0,1,-1,0,0,-1};
    int floodFill(vector<vector<int> > map, int n, int m) {
        int step=0;
        bfs(map,n,m,step);
        return step;
    }
private:
    void bfs(vector<vector<int> >&map,int &n,int &m,int &step)
    {
        queue<pair<int,int> >q;
        q.push(pair<int,int>(0,0));
        while(!q.empty())
        {
            ++step;
            int size=q.size();
            for(int i=0;i<size;++i)
            {
                pair<int,int>f=q.front();
                q.pop();
                visited[f.first][f.second]=1;
                for(int i=0;i<4;++i)
                {
                    int tx=f.first+offset[i][0];
                    int ty=f.second+offset[i][1];
                    if(tx==n-1&&ty==m-1) return ;
                   if(tx<0||tx>=n||ty<0||ty>=m||map[tx][ty]==1||visited[tx][ty]==1)
                        continue;
                    q.push(pair<int,int>(tx,ty));
                }
            }
        }
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_43871369/article/details/93406405
今日推荐