rt。WA最后一个点
#include<bits/stdc++.h>
using namespace std;
int h,w,n,qx,qy,zx,zy,bj[210][210],vis[310];
string s[210];
struct node{
int x,y,val;
}a[310];
struct BFS{
int x,y,cs;
};
vector<int> to[310];
int main(){
cin>>h>>w;
for(int i=1;i<=h;i++){
cin>>s[i];
s[i]=" "+s[i];
for(int j=1;j<=w;j++)
if(s[i][j]=='S') qx=i,qy=j;
else if(s[i][j]=='T') zx=i,zy=j;
}
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].x>>a[i].y>>a[i].val;
bj[a[i].x][a[i].y]=i;
}
if(!bj[qx][qy]){
cout<<"No";
return 0;
}
a[n+1]=node{zx,zy,0};
for(int i=1;i<=n;i++){
queue<BFS> que;
bool dd[210][210];
memset(dd,0,sizeof(dd));
que.push(BFS{a[i].x,a[i].y,0});
while(!que.empty()){
int x=que.front().x,y=que.front().y,cs=que.front().cs;
if(bj[x][y]&&bj[x][y]!=i) to[i].push_back(bj[x][y]);
if(x==zx&&y==zy) to[i].push_back(n+1);
que.pop();
if(x+1<=w&&s[x+1][y]!='#'&&cs<a[i].val&&!dd[x+1][y]) dd[x+1][y]=1,que.push(BFS{x+1,y,cs+1});
if(x-1>=1&&s[x-1][y]!='#'&&cs<a[i].val&&!dd[x-1][y]) dd[x-1][y]=1,que.push(BFS{x-1,y,cs+1});
if(y+1<=h&&s[x][y+1]!='#'&&cs<a[i].val&&!dd[x][y+1]) dd[x][y+1]=1,que.push(BFS{x,y+1,cs+1});
if(y-1>=1&&s[x][y-1]!='#'&&cs<a[i].val&&!dd[x][y-1]) dd[x][y-1]=1,que.push(BFS{x,y-1,cs+1});
}
}
queue<int> que;
que.push(bj[qx][qy]);
vis[bj[qx][qy]]=1;
while(!que.empty()){
int x=que.front();
que.pop();
for(auto &i:to[x])
if(!vis[i]){
vis[i]=1;
que.push(i);
}
}
cout<<(vis[n+1]?"Yes":"No");
return 0;
}