#include<bits/stdc++.h>
using namespace std;
int n,m,t,fx,fy,sx,sy,a[205][205],b[205][205],dis[205][205];
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
struct data
{
int x,y,val;
// const bool operator<(const data &x)const
// {
// return val<x.val;
// }
}k;
void bfs()
{
queue<data>q;
memset(dis,-0x3f,sizeof dis);
// data k;
k={sx,sy,max(b[sx][sy],0)};
dis[sx][sy]=max(b[sx][sy],0);
q.push(k);
while(!q.empty())
{
k=q.front();
q.pop();
if(k.x==fx&&k.y==fy)
{
printf("Yes\n");
return;
}
if(k.val==0)
continue;
if(k.val<dis[k.x][k.y])
continue;
for(int i=0;i<4;i++)
{
int xx=k.x+dx[i],yy=k.y+dy[i];
if(xx>0&&xx<=n&&yy>0&&yy<=m&&a[xx][yy]==0)
{
int v=max(b[xx][yy],k.val-1);
if(v>dis[xx][yy])
{
q.push({xx,yy,v});
dis[xx][yy]=v;
}
}
}
}
printf("No\n");
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
char c;
cin>>c;
if(c=='S')
{
sx=i;
sy=j;
}
if(c=='T')
{
fx=i;
fy=j;
}
if(c=='#')
a[i][j]=1;
}
cin>>t;
while(t--)
{
int x,y,z;
cin>>x>>y>>z;
b[x][y]=z;
}
bfs();
return 0;
}
评测记录