前言
今天这道题是一道简单的bfs。如果你对与bfs不是很了解,那么建议等待,后面出一期bfs。
bfs伪代码,记住这个框架,刷题肯定会用到 ^o^!
伪代码1.0:bfs整个树
queue<T> buff;
buff.push();
while(!buff.empty())
{
T temp = buff.front();
buff.pop();
buff.push(); //新节点入队列
}
伪代码2.0: 求树的高度 下题用到
queue<T> buff;
buff.push();
int count = -1;
while(!buff.empty())
{
count++;
int layerSize = buff.size();
for(int i=0;i<layerSize;i++)
{
T temp = buff.front();
buff.pop();
buff.push(); //新节点入队列
}
}
题目描述
思路
遇到问题不要怕,奥利给:
从所有陆地开始广度感染,最终感染为最大距离。
代码
class Solution {
public:
int maxDistance(vector<vector<int>>& grid) {
//异常判断
if(grid.size()==0||grid[0].size()==0)
return 0;
//BFS
queue <pair<int, int>> buff; //突然想到lolbuff
int row = grid.size();
int col = grid[0].size();
//所有陆地入队列
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
if(grid[i][j])
buff.push(make_pair(i,j));
}
}
int direction[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
int count = -1;
//对付 全1用例 全为陆地
if(buff.size()==row*col)
return count;
//思路2.0判断深度
while(!buff.empty())
{
int layersize = buff.size();
cout<<count;
count++;
for(int la=0;la<layersize;la++)
{
pair<int,int> pos = buff.front();
buff.pop();
for(int d=0;d<4;d++)
{
int i = pos.first + direction[d][0];
int j = pos.second + direction[d][1];
if(i<0||j<0||i==grid.size()||j==grid[0].size()||grid[i][j]==1) continue;
buff.push(make_pair(i,j));
grid[i][j]=1;
}
}
}
return count;
}
};
重难点
本期用到数据结构pair
//使用队列时 这里的puff为edg_puff
queue<pair(int,int)> puff;
//入队列时
puff.push(make_pair);
//出队列是
pair<int,int> temp= puff.front();
temp.first;
temp.second;
狗头保命,今天换个风格。写点有趣的刷题记录