#include<iostream> #include<cstring> #include<queue> using namespace std; struct MAP { int x,y,step; }s,e,head,tail; char g[100][100]; int v[100][100],f[][2]={{-1,0},{0,1},{1,0},{0,-1}},n,m; int bfs() { memset(v,0,sizeof(v)); queue<struct MAP> q; q.push(s); s.step=0; v[s.x][s.y]=1; while(!q.empty()) { head=q.front(); q.pop(); for(int i=0;i<4;i++) { tail.x=head.x+f[i][0]; tail.y=head.y+f[i][1]; tail.step=head.step+1; if(!v[tail.x][tail.y]&&g[tail.x][tail.y]!='#'&&tail.x>=0&&tail.x<n&&tail.y>=0&&tail.y<m) { if(tail.x==e.x&&tail.y==e.y) return tail.step; v[tail.x][tail.y]=1; q.push(tail); } } } return -1; } int main() { int t,i,j; cin>>t; while(t--) { cin>>n>>m; for(i=0;i<n;i++) for(j=0;j<m;j++) { cin>>g[i][j]; if(g[i][j]=='S') { s.x=i; s.y=j; } else if(g[i][j]=='E') { e.x=i; e.y=j; } } cout<<bfs()<<endl; } return 0; } /************************************************************** Problem: 2125 User: admin Language: C++ Result: Accepted Time:9 ms Memory:2124 kb ****************************************************************/