欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > C-迷宫(牛客月赛99

C-迷宫(牛客月赛99

2026/6/1 1:03:06 来源:https://blog.csdn.net/m0_74310050/article/details/141477732  浏览:    关键词:C-迷宫(牛客月赛99

题意:在n×m的迷宫里,有空地和障碍,有一个超能力:当前位置朝任意方向上所有的障碍物都会清除,超能力最多使用一次,如果可以到终点输出yes

分析:先从终点开始走,将沿路的障碍的横坐标和纵坐标都做上标记,再从起点开始走,如果下一个网格为障碍,判断该方向的坐标是否被做上标记,如果被标记,则可以在该方向上释放超能力。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+10;
int n,m,sx,sy,zx,zy;
char a[N][N];
ll ans=0;
int temp[N][N],xx[N],yy[N];
ll dx[4]={0,0,1,-1};
ll dy[4]={-1,1,0,0};
void d(int x,int y){if(x==sx&&y==sy){ans++;return;}for(int i=0;i<4;i++){if(a[x+dx[i]][y+dy[i]]=='#'){xx[x+dx[i]]=1;yy[y+dy[i]]=1;}if(temp[x+dx[i]][y+dy[i]]==0&&(a[x+dx[i]][y+dy[i]]=='E'||a[x+dx[i]][y+dy[i]]=='.'||a[x+dx[i]][y+dy[i]]=='S')){temp[x][y]=1;d(x+dx[i],y+dy[i]);}}
}
void dd(int x,int y){if(x==zx&&y==zy){ans++;return;}for(int i=0;i<4;i++){if(temp[x+dx[i]][y+dy[i]]==0&&(a[x+dx[i]][y+dy[i]]=='E'||a[x+dx[i]][y+dy[i]]=='.'||a[x+dx[i]][y+dy[i]]=='S')){temp[x][y]=1;dd(x+dx[i],y+dy[i]);}else if(temp[x+dx[i]][y+dy[i]]==0&&a[x+dx[i]][y+dy[i]]=='#'){if(yy[y]==1&&dy[i]==0){ans++;return;}else if(xx[x]==1&&dx[i]==0){ans++;return;}}}
}
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'){sx=i,sy=j;}else if(a[i][j]=='E'){zx=i,zy=j;}}}d(zx,zy);if(ans>0){cout<<"YES"<<endl;return 0;}dd(sx,sy);if(ans>0)cout<<"YES"<<endl;else cout<<"NO"<<endl;return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词