紧接着上文,我们继续学习BFS算法的剩下的内容


class Solution {
public:
vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {
int m=mat.size(),n=mat0.size();
vector<vector<int>> nums(m,vector<int>(n,-1));
queue<pair<int,int>> q;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(matij==0){
numsij=0;
q.push({i,j});
}
}
}
int dx4={0,0,1,-1};
int dy4={1,-1,0,0};
while(q.size())
{
auto a,b=q.front();
q.pop();
for(int k=0;k<4;k++){
int x=a+dxk,y=b+dyk;
if(x>=0&&x<m&&y>=0&&y<n&&numsxy==-1){
numsxy=numsab+1;
q.push({x,y});
}
}
}
return nums;
}
};



class Solution {
public:
int numEnclaves(vector<vector<int>>& nums) {
int m=nums.size(),n=nums0.size();
vector<vector<bool>> vis(m,vector<bool>(n));
queue<pair<int,int>> q;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(i==0||i==m-1||j==0||j==n-1){
if(numsij==1){
q.push({i,j});
visij=true;
}
}
}
}
int dx4={0,0,1,-1};
int dy4={1,-1,0,0};
while(q.size()){
auto a,b=q.front();
q.pop();
for(int k=0;k<4;k++){
int x=a+dxk,y=b+dyk;
if(x>=0&&x<m&&y>=0&&y<n&&numsxy==1&&!visxy){
q.push({x,y});
visxy=true;
}
}
}
int ret=0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(!visij&&numsij==1) ret++;
}
}
return ret;
}
};



class Solution {
public:
vector<vector<int>> highestPeak(vector<vector<int>>& is) {
int m=is.size(),n=is0.size();
queue<pair<int,int>> q;
vector<vector<int>> nums(m,vector(n,-1));
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(isij==1){
numsij=0;
q.push({i,j});
}
}
}
int dx4={0,0,1,-1};
int dy4={1,-1,0,0};
while(q.size()){
auto a,b=q.front();
q.pop();
for(int k=0;k<4;k++){
int x=a+dxk,y=b+dyk;
if(x>=0&&x<m&&y>=0&&y<n&&numsxy==-1){
numsxy=numsab+1;
q.push({x,y});
}
}
}
return nums;
}
};


class Solution {
public:
int maxDistance(vector<vector<int>>& nums) {
int m=nums.size(),n=nums0.size();
queue<pair<int,int>> q;
vector<vector<int>> an(m,vector<int>(n,-1));
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(numsij==1){
anij=0;
q.push({i,j});
}
}
}
int ret=-1;
int dx4={0,0,1,-1};
int dy4={1,-1,0,0};
while(q.size()){
auto a,b=q.front();
q.pop();
for(int k=0;k<4;k++){
int x=a+dxk,y=b+dyk;
if(x>=0&&x<m&&y>=0&&y<n&&anxy==-1){
anxy=anab+1;
q.push({x,y});
ret=max(ret,anxy);
}
}
}
return ret;
}
};
我们下面将要对扩朴排序进行使用哈!



class Solution {
public:
bool canFinish(int n, vector<vector<int>>& p) {
unordered_map<int,vector<int>> edges;
vector<int> in(n);
for(auto e: p){
int a=e0,b=e1;
edgesb.push_back(a);
ina++;
}
queue<int> q;
for(int i=0;i<n;i++){
if(ini==0) q.push(i);
}
while(!q.empty()){
int t=q.front();
q.pop();
for(int e:edgest){
ine--;
if(ine==0) q.push(e);
}
}
for(int i:in)
if(i) return false;
return true;
}
};



class Solution {
public:
vector<int> findOrder(int n, vector<vector<int>>&nums) {
unordered_map<int,vector<int>> edges;
vector<int> in(n);
for(auto e: nums){
int a=e0,b=e1;
edgesb.push_back(a);
ina++;
}
queue<int> q;
for(int i=0;i<n;i++){
if(ini==0) q.push(i);
}
vector<int> ret;
while(q.size()){
int t=q.front();
q.pop();
ret.push_back(t);
for(auto e:edgest){
ine--;
if(ine==0) q.push(e);
}
}
if(ret.size()==n) return ret;
else return {};
}
};




class Solution {
public:
unordered_map<char,unordered_set<char>> edges;
unordered_map<char,int> in;
bool check;
string alienOrder(vector<string>& words) {
for(auto& s:words){
for(auto ch:s){
inch=0;
}
}
int n=words.size();
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
add(wordsi,wordsj);
if(check) return "";
}
}
queue<char> q;
for(auto&a,b: in){
if(b==0) q.push(a);
}
string ret;
while(q.size()){
char t=q.front();
q.pop();
ret+=t;
for(auto ch: edgest){
inch--;
if(inch==0) q.push(ch);
}
}
for(auto &a,b: in){
if(b!=0) return "";
}
return ret;
}
void add(string& s1,string& s2){
int n=min(s1.size(),s2.size());
int i=0;
for(;i<n;i++){
if(s1i!=s2i){
char a=s1i,b=s2i;
if(!edges.count(a)||!edgesa.count(b)){
edgesa.insert(b);
inb++;
}
break;
}
}
if(i==s2.size()&&i<s1.size()) check=true;
}
};