第一篇题解
2025-11-25 22:31:32
发布于:北京
5阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
const int N=350;
int n,m;
int ys;
int sx,sy;
int ex,ey;
int neng;
bool flag;
int cnt;
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
char mp[N][N];
int mpy[N][N];
bool vis[N][N];
struct node{
int x,y;
};
void bfs(){
queue<node>q;
q.push({sx,sy});
vis[sx][sy]=1;
while(cnt>0&&!q.empty()){
flag=0;
node t=q.front();
q.pop();
for(int i=0;i<4;i++){
int tx=t.x+dx[i];
int ty=t.y+dy[i];
if(tx<=0||ty<=0||tx>n||ty>m)flag=0;continue;
if(vis[tx][ty]!=-1||mp[tx][ty]=='#')flag=0;continue;
if(mpy[tx][ty]!=-1)cnt=mpy[tx][ty];flag=1;
q.push({tx,ty});
}
if(!flag){
cnt--;
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j];
if(mp[i][j]=='S'){
sx=i;
sy=j;
}
if(mp[i][j]=='T'){
ex=i;
ey=j;
}
}
}
cin>>ys;
memset(vis,-1,sizeof(vis));
memset(mpy,-1,sizeof(mpy));
for(int i=1;i<=ys;i++){
int x,y;
int yao;
cin>>x>>y>>yao;
mpy[x][y]=yao;
}
if(mpy[sx][sy]==-1){
cout<<"No\n";
return 0;
}
neng=mpy[sx][sy];
bfs();
if(vis[ex][ey]==1){
cout<<"Yes\n";
}else{
cout<<"No\n";
}
return 0;
}
全部评论 1
这可是最优解啊2025-11-25 来自 北京
1







有帮助,赞一个