bfs搜索蜂巢
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
#define INF 0x3f3f3f3f
int vis[10005][10005];
char str[10005][10005];
int n,m;
int stx,sty,ex,ey;
struct node{
int x,y,num;
};
int mx[6] = {1, 1, -1, -1, 2, -2};
int my[6] = {3, -3, 3, -3, 0, 0};
int bfs()
{
queue<node> que;
que.push(node {stx,sty,1});
vis[stx][sty]=0;
while(!que.empty())
{
node t=que.front();que.pop();
if(t.x==ex&&t.y==ey)
return t.num;
for(int i=0;i<6;i++)
{
int xx,yy;
xx=t.x+mx[i];
yy=t.y+my[i];
if(xx>=0&&xx<n&&yy>=0&&yy<m&&str[xx][yy]==' ')
{
int xxx,yyy;
xxx=xx+mx[i];
yyy=yy+my[i];
if(xxx>=0&&xxx<n&&yyy>=0&&yyy<m&&t.num+1<vis[xxx][yyy])
{
vis[xxx][yyy]=t.num+1;
que.push(node{xxx,yyy,t.num+1});
}
}
}
}
return -1;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
getchar();
n=4*n+3;
m=6*m+3;
for(int i=0;i<n;i++)
{
gets(str[i]);
for(int j=0;str[i][j]!='\0';j++)
{
vis[i][j]=INF;
if(str[i][j]=='S')
{
stx=i,sty=j;
}
if(str[i][j]=='T')
{
ex=i,ey=j;
}
}
}
printf("%d\n",bfs());
}
return 0;
}