为什么我B一直错两个点啊
#include<bits/stdc++.h>
using namespace std;
int h,w,n,xz[305],yz[305],s[305],xx,yy,xxx,yyy,dx[]={-1,1,0,0},dy[]={0,0,-1,1};
char a[305][305];
int vis2[305][305];
bool ok=0,vis[305][305];
void dfs(int x,int y,int sum){
if(sum==-1 || ok==1){
return;
}
if(x==xxx && y==yyy){
ok=1;
return;
}
for(int i=0;i<4;i++){
int tx=x+dx[i],ty=y+dy[i];
if(tx>=1 && ty>=1 && tx<=h && ty<=w && a[tx][ty]!='#'){
if(vis[tx][ty]){
vis[tx][ty]=0;
dfs(tx,ty,sum+vis2[tx][ty]-1);
vis[tx][ty]=1;
}else{
dfs(tx,ty,sum-1);
}
}
}
}
int main(){
cin>>h>>w;
for(int i=1;i<=h;i++){
for(int j=1;j<=w;j++){
cin>>a[i][j];
if(a[i][j]=='S'){
xx=i;
yy=j;
}
if(a[i][j]=='T'){
xxx=i;
yyy=j;
}
}
}
cin>>n;
for(int i=1;i<=n;i++){
cin>>xz[i]>>yz[i]>>s[i];
vis[xz[i]][yz[i]]=1;
vis2[xz[i]][yz[i]]=s[i];
}
if(vis[xx][yy]){
vis[xx][yy]=0;
dfs(xx,yy,vis2[xx][yy]);
}else{
dfs(xx,yy,0);
}
if(ok){
cout<<"Yes";
}else{
cout<<"No";
}
return 0;
}