leetcode:994. 腐烂的橘子(广搜)

题目:

在这里插入图片描述

分析:

这显然是一道多源的搜索题目。我习惯用广搜。

代码:

void f(vector<vector<int> > &n,vector<vector<int> > &g,int x,int y,int dep,int c)
{
 if(x==-1||y==-1||x==n.size()||y==n[0].size()) return;
 if(g[x][y]!=1&&c!=0) return;
 c=1;
 if(dep>=n[x][y]) return;
 n[x][y]=dep;
 f(n,g,x-1,y,dep+1,c);
 f(n,g,x+1,y,dep+1,c);
 f(n,g,x,y-1,dep+1,c);
 f(n,g,x,y+1,dep+1,c);
}
int main()
{
 vector<vector<int> > g;
 //[[0,0,1,2],[2,0,1,1]]
 vector<int> y(4,0);
 y[0]=0;
 y[1]=0;
 y[2]=1;
 y[3]=2;
 g.push_back(y);
 y[0]=2;
 y[1]=0;
 y[2]=1;
 y[3]=1;
 g.push_back(y); 
 
 if(g.size()==0) return 0;
 //记录距离 
 vector<vector<int> > n=g;
 for(int i=0;i<n.size();i++)
 {
  for(int j=0;j<n[0].size();j++)
  {
   n[i][j]=1<<30;
  }
 }
 for(int i=0;i<n.size();i++)
 {
  for(int j=0;j<n[0].size();j++)
  {
   if(g[i][j]==2)
   {
    vector<vector<int> > g1=g;
    f(n,g1,i,j,0,0);
   }
  }
 }
 int maxx=0;
 for(int i=0;i<n.size();i++)
 {
  for(int j=0;j<n[0].size();j++)
  {
   if(g[i][j])
   maxx=max(maxx,n[i][j]);
  }
 }
 if(maxx==1073741824) cout<<-1<<endl;
 cout<<maxx;
}
发布了196 篇原创文章 · 获赞 126 · 访问量 4674

猜你喜欢

转载自blog.csdn.net/weixin_42721412/article/details/104490928