#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;
}
BFS 模板 【迷宫的最短路径】
最新推荐文章于 2023-02-20 20:43:38 发布