以S为起点E为终点#为障碍
#include<bits/stdc++.h>
using namespace std;
int m,n;
char a[110][110];
int vis[110][110];
int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
struct xx
{
int a,b;
};
int judge(int i,int j)
{
if(i>=0&&i<n&&j>=0&&j<m&&!vis[i][j]&&a[i][j]!='#')
return 1;
return 0;
}
int bfs(int i,int j)
{
memset(vis,0,sizeof(vis));
vis[i][j]=1;
xx sta,now,nex;
sta.a=i,sta.b=j;
queue<xx>k;
k.push(sta);
while(!k.empty())
{
now=k.front();
k.pop();
if(a[now.a][now.b]=='E')
return vis[now.a][now.b]-1;
for(int t=0;t<4;t++)
{
nex.a=now.a+dx[t];
nex.b=now.b+dy[t];
if(judge(nex.a,nex.b))
{
vis[nex.a][nex.b]=vis[now.a][now.b]+1;
k.push(nex);
}
}
}
return 0;
}
int main()
{
while(scanf("%d%d",&n,&m)==2)
{
for(int i=0;i<n;i++)
scanf("%s",a[i]);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(a[i][j]=='S')
printf("%d\n",bfs(i,j));
}
}
/*
4 4
#.S.
.##.
E.#.
....
5 3
S#.
.#E
.#.
.#.
...
*/