题解 | 小d和超级泡泡堂

小d和超级泡泡堂

https://www.nowcoder.com/practice/eb226c71a63f45c6881b2f33c042f2ae

玩家无法移动到的地方炸弹产生的火肯定也烧不到,而玩家可以移动到的地方可以通过在起始点处放炸弹用火烧到,因此以初始点进行一次bfs判断四联通区域内有多少个草即可。

#include<bits/stdc++.h>
using namespace std;
#define LL long long
const LL dx[4]={-1,0,0,1},dy[4]={0,-1,1,0};
const LL maxn=1100,M=998244353,inf=1LL<<62;
LL n,m,sx,sy,ans=0;char a[maxn][maxn]={};
bool v[maxn][maxn]={};
bool ok(LL x,LL y){return (1<=x&&x<=n&&1<=y&&y<=m);}
queue<pair<LL,LL> >q;
void bfs(LL X,LL Y){
	q.push(make_pair(X,Y));v[X][Y]=1;
	while(!q.empty()){
		LL x=q.front().first,y=q.front().second;q.pop();
		if(a[x][y]=='!')ans++;
		for(LL i=0;i<4;i++){
			LL xx=x+dx[i],yy=y+dy[i];
			if(!ok(xx,yy))continue;
			if(a[xx][yy]=='#')continue;
			if(v[xx][yy])continue;
			v[xx][yy]=1;
			q.push(make_pair(xx,yy));
		}
	}
}
int main(){	
	scanf("%lld%lld",&n,&m);
	for(LL i=1;i<=n;i++)scanf("%s",a[i]+1);
	for(LL i=1;i<=n;i++)for(LL j=1;j<=m;j++)if(a[i][j]=='@')sx=i,sy=j;
	bfs(sx,sy);
	printf("%lld",ans);
	return 0;
}

全部评论

相关推荐

02-14 12:40
门头沟学院 Java
程序员花海:1.面试要求必须Java笔试不一定 2.难度对等秋招 远超于日常实习是因为同一批次且转正很多 竞争压力大 3.第一个加点指标,上线了就把接口性能加上去 使用本地缓存这个不算亮点 只是技术选型,要把为什么采用这个和背后的思考写出来而不是单纯堆叠技术没意义 4.八股要一直看 很容易忘记 5.拼团交易这个老问题 堆积技术 另外建议你把奖项合并到教育背景 没必要拆出来放最后
我的简历长这样
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务