题目:
分析:
这显然是一道多源的搜索题目。我习惯用广搜。
代码:
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;
}