#include<bits/stdc++.h>

using namespace std;

char a[100][100];

int book[100][100]={0},b[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; 

int c,d;

int xq,yq,xz,yz;

struct s{

int x;

int y;

int s;

}qe[100000];


int main()

{

int n;

cin>>n;

while(n--)

{

memset(book, 0, sizeof(book));

char s='S',e='E';

cin>>c>>d;

for(int i=0;i<c;i++)

for(int j=0;j<d;j++)

cin>>a[i][j];

for(int i=0;i<c;i++)

for(int j=0;j<d;j++)

{

if(s==a[i][j]) {

xq=i;yq=j;

}

if(e==a[i][j]){

xz=i;yz=j;//找到起始点的坐标 

}

}

book[xq][yq]=1;

 

int tx=0,ty=0,k,h=1,tt=1;

qe[tt].x=xq;

qe[tt].y=yq;

qe[tt].s=0;

tt++;

int flag=0;//用来标记是否到达终点 


while(h<tt)

{

for(k=0;k<=3;k++)//枚举四个方向; 

{

tx=qe[h].x+b[k][0];

ty=qe[h].y+b[k][1];

if((a[tx][ty]=='-'||a[tx][ty]=='E')&& book[tx][ty]==0&& tx>=0&&tx<c&&ty>=0&&ty<d)

//判断是否越界,是否在路上 

//满足条件出列 

{

book[tx][ty]=1;//标记这个点已经走过 

qe[tt].y=ty;

qe[tt].x=tx;

qe[tt].s=qe[h].s+1;

tt++;

}

if(tx==xz&&ty==yz)

{

flag=1;

break;

}

}

if(flag==1)

break;

h++;

}

if(flag==1)

cout<<qe[tt-1].s<<endl;

else cout<<-1<<endl;

}

return 0;

 } 


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论