rt,检查了好几遍也没看出问题。
#include<iostream>
using namespace std;
int n,m,x,y,x2,y2,b[1005][1005],v[4][2]={{0,1},{1,0},{0,-1},{-1,0}},q;
char a[1005][1005];
void dfs(int x,int y,int cnt){
if(cnt>2)return;
if(a[x][y]=='T'){
cout<<"YES";
exit(0);
}
for(int i=0;i<=3;i++){
int px=x+v[i][0];
int py=y+v[i][1];
if(px>=1&&px<=n&&py>=1&&py<=m&&a[px][py]!='*'&&b[px][py]==0){
b[px][py]=1;
if(i!=q)cnt++;
int q2=q;
q=i;
dfs(px,py,cnt);
q=q2;
b[px][py]=0;
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]=='S'){
x=i;y=j;
}
}
}
b[x][y]=1;
dfs(x,y,0);
cout<<"NO";
return 0;
}