#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <vector> #include <queue> #include <algorithm> #include <set> #include <stack> using namespace std; #define MM(a) memset(a,0,sizeof(a)) typedef long long LL; typedef unsigned long long ULL; const int maxn = 2*1e3+5; const int INF = 1e9+5; const int mod = 1000000007; const double eps = 1e-7; struct node { int x, y, step; }; char map[105][105]; bool vis[105][105]; int dx[4] = {1, -1, 0, 0}; int dy[4] = {0, 0, -1, 1}; int n, m; int sx, sy, ex, ey; int ans; bool check(int x,int y) { if(x<0 || x>=n || y<0 || y>=m) return 1; if(vis[x][y] || map[x][y]=='#') return 1; return 0; } void bfs() { queue<node> Q; node a, next; a.x = sx; a.y = sy; a.step = 0; vis[a.x][a.y] = 1; Q.push(a); while(!Q.empty()) { a = Q.front(); Q.pop(); if(map[a.x][a.y]=='E') { ans = a.step; return ; } for(int i=0; i<4; i++) { next = a; next.x += dx[i]; next.y += dy[i]; if(check(next.x,next.y)) continue; next.step = a.step+1; vis[next.x][next.y] = 1; Q.push(next); } } ans = -1; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=0; i<n; i++) scanf("%s",map[i]); for(int i=0; i<n; i++) { for(j=0; j<m; j++) { if(map[i][j] == 'S') { sx = i; sy = j; } } } MM(vis); bfs(); printf("%d\n",ans); } return 0; }
时间: 2025-01-30 17:59:29