牛客 遗迹逃亡 基础bfs

题目连接:牛客 遗迹逃亡
基础迷宫类bfs广搜题

题目描述

为了寻找稀有的宝可梦,小梁进了一个古代遗迹中。在一次意外的触发之下,她复活了超古代宝可梦化石翼龙并激怒了对方,现在化石翼龙准备攻击小梁,她要逃离这个遗迹了。
但化石翼龙的实力过于强大,让这个本就历经风霜的遗迹开始了毁灭性的崩塌,有大量的落石下落,现在我们要帮助小梁逃离这个遗迹。
遗迹是一个\text{N * M}N * M 的矩阵,\text{g}g表示该遗迹的出口;\text{s}s表示小梁所处位置;现在遗迹中有大量落石正在下落。因为小梁不能翻越这些落石,所以必须绕开,同时小梁只能走上下左右4个方向。
现在小梁要开始逃亡了,那么小梁可以顺利逃出遗迹吗?

输入描述

第一行两个整数 N, M (1\leq N,M \leq 500)N,M(1≤N,M≤500) 输入一个
\text{N×M}N×M的矩阵: \text{.}.表示道路; 表示落石的位置; \text{s}s表小梁所处位置;
\text{g}g表遗迹的出口 。

输出描述

如果小梁能顺利逃出遗迹则输出 “Yes”,反之输出 “No”(不包括引号)。

#pragma GCC optimize(2)
#include<bits/stdc++.h> 
using namespace std;
#define endl "\n"
char s[505][505];
int vis[505][505];
int n,m,l,r,f;
void bfs(int l,int r)
{
	if(s[l][r]=='#'||l<1||l>n||r<1||r>m||vis[l][r])return ;
	if(s[l][r]=='g'){
		f=1;return ;
	}
	vis[l][r]=1;
	bfs(l-1,r);
	bfs(l+1,r);
	bfs(l,r-1);
	bfs(l,r+1);	
	//vis[l][r]=0;
}
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++){
    	cin>>s[i][j];
    	if(s[i][j]=='s')l=i,r=j;
	}
	bfs(l,r);
    if(f)cout<<"Yes";
    else cout<<"No";
   return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值