https://www.acwing.com/problem/content/1103/
#include<bits/stdc++.h>
using namespace std;
const int N=205;
vector<int> ma;
char s[N][N];
int y[N*N];
int t,r,c;
int ans;
bool p=false;
int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
int xs(int i){
return (i-1)/c+1;
}
int ys(int i){
return (i-1)%c+1;
}
int hs(int x,int y){
return (x-1)*c+y;
}
void show(){
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
printf("%c",s[i][j]);
}
puts("");
}
puts("");
}
void bfs(){
//int j=0;
// y[j]=0;
y[ma.size()-1]=0;
while(!ma.empty()){
int i=ma[ma.size()-1];
int e=y[i];
// int num=ma.size();
ma.pop_back();
for(int f=0;f<4;f++){
int a=xs(i)+dx[f],b=ys(i)+dy[f];
if(s[a][b]=='#')continue;
if(s[a][b]=='.'){
// ans++;
// printf("%d\n",hs(a,b));
ma.insert(ma.begin(),hs(a,b));
y[hs(a,b)]=e+1;
s[a][b]='#';
}
if(s[a][b]=='E'){
p=true;
// cout<<e<<endl;
ans=e+1;
ma.clear();
return;
}
//show();
}
}
}
int main(){
cin>>t;
getchar();
while(t--){
// ans=100000;
ans=0;
p=false;
// memset(st,false,sizeof st);
memset(s,'#',sizeof s);
memset(y,0,sizeof y);
cin>>r;
getchar();
cin>>c;
getchar();
for(int i=1;i<=r;i++){
for(int j=1;j<=c;j++){
scanf("%c",&s[i][j]);
}
getchar();
}
for(int i=1;i<=r*c;i++){
if(s[xs(i)][ys(i)]=='S'){
s[xs(i)][ys(i)]='#';
ma.push_back(i);
bfs();
break;
}
}
if(p==true)
{
printf("%d\n",ans);
continue;
}
printf("oop!\n");
}
return 0;
}