这道题没想到用memset超时了
#include <iostream>
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
typedef pair<int,int>P;
const int maxn=7000;
char mp[maxn][maxn];
int flag[maxn][maxn];
int len[maxn][maxn];
int sx,sy;
int ex,ey;
int ax[]={-2,-2,2,2,-4,4};
int ay[]={-6,6,-6,6,0,0};
int r,c;
void bfs(int ssx,int ssy){
//memset(flag,0,sizeof(flag));
for(int i=1;i<=4*r+3;i++)
for(int j=1;j<=6*c+3;j++)
flag[i][j]=0;
queue<P>q;
flag[ssx][ssy]=1;len[ssx][ssy]=0;
P p;p.first=ssx;p.second=ssy;
q.push(p);
while(!q.empty()){
p=q.front();
q.pop();
int xx=p.first;int yy=p.second;
if(xx==ex&&yy==ey) break;
for(int i=0;i<4;i++){
int x=xx+ax[i];int y=yy+ay[i];
if(0<x&&x<=4*r+3&&0<y&&y<6*c+3&&!(mp[xx+ax[i]/2][yy+ay[i]/2]=='/'||mp[xx+ax[i]/2][yy+ay[i]/2]=='\\')&&flag[x][y]==0){
p.first=x;p.second=y;
flag[x][y]=1;len[x][y]=len[xx][yy]+1;
q.push(p);
}
}
for(int i=4;i<6;i++){
int x=xx+ax[i];int y=yy;
if(0<x&&x<=4*r+3&&0<y&&y<6*c+3&&!(mp[xx+ax[i]/2][yy]=='-')&&flag[x][y]==0){
p.first=x;p.second=y;
flag[x][y]=1;len[x][y]=len[xx][yy]+1;
q.push(p);
}
}
}
}
int main()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
int T;
cin>>T;
char cr[7000];
//while(cin>>T){
while(T--){
//memset(len,0,sizeof(len));
for(int i=1;i<=4*r+3;i++)
for(int j=1;j<=6*c+3;j++)
len[i][j]=0;
cin>>r>>c;
cin.getline(cr,6*c+4);
//getchar();
for(int i=1;i<=4*r+3;i++){
cin.getline(cr,6*c+4);
//gets(cr);
//int l=strlen(cr);
for(int j=1;j<=6*c+3;j++){
mp[i][j]=cr[j-1];
if(mp[i][j]=='S'){
sx=i;sy=j;
}
if(mp[i][j]=='T'){
ex=i;ey=j;
}
}
}
bfs(sx,sy);
if(len[ex][ey]!=0) cout<<len[ex][ey]+1<<endl;
else cout<<-1<<endl;
}
//}
return 0;
}