从(1,1)到(n,m)阻碍找珍宝的最小放森林次数
ll n,m,t,minn=INF,maxx,cnt,sum,tmp,f;
char c[maxm];
int vis[maxm];
bool dfs(ll x,ll y){
if(x==n && y==m) return true;
if(x<1 || y<1 || x>n || y>m) return false;
if(vis[(x-1)*m+y] || c[(x-1)*m+y]=='#') return false; //已经走过 或是森林
vis[(x-1)*m+y]=1;
if(dfs(x+1,y)) return true;
else return dfs(x,y+1);
}
int main(){
cin>>n>>m;
rep(i,1,n){
rep(j,1,m){
cin>>c[(i-1)*m+j];
}
}
if(!dfs(1,1))
return cout<<0<<endl,0; //不阻碍都达不到终点 0次改#
//已标记的那条路可以到达
vis[1]=0;
if(dfs(1,1)) //在原先标记过的点 基础上再一遍dfs 如果还能到达
cout<<2<<endl; //堵2个
else
cout<<1<<endl; //堵原先那条
return 0;
}