[题解]CF60B

这篇博客介绍了CF60B问题的解题思路,主要使用了广度优先搜索(BFS)的方法,通过设置三维方向进行求解。详细代码附带完整注释。
摘要由CSDN通过智能技术生成

题意简述:

CF60B

思路:

一个简单的广搜,只要设置方向为三维即可。

代码:(注释很全)

#include<cstdio>//建议不用万能头,提高效率 
#include<queue>//广搜必备的数据结构 
using namespace std;
int n,m,k;//k层数,n长,m宽 
int ans;
int sx,sy;//输入的第一层的x,y坐标 
int dx[6]={0,0,0,0,1,-1};//x方向 
int dy[6]={0,0,1,-1,0,0};//y方向 
int dh[6]={1,-1,0,0,0,0};//h方向 
char a[15][15][15];//记录地图 
char read(){//快读char 
	char ch=getchar();
	while(ch!='.'&&ch!='#')ch=getchar();//如果不是地图中出现的字符,则说明输入了换行或空格 
	return ch; 
}
signed main(){
	scanf("%d%d%d",&k,&n,&m);
	for(int a1=1;a1<=k;a1++)
		for(int a2=1;a2<=n;a2++)
			for(int a3=1;a3<=m;a3++)
				a[a1][a2][a3]=read();//用read读入,可以提高效率。 
	scanf("%d%d",&sx,&sy);
	queue<int> qx,qy,qh;
	qh.push(1);
	qx.push(sx);
	qy.push(sy);
	a[1][sx][sy]='#';//标记为访问过,防止重复 
	while(!qx.empty()){//广搜框架 
		int h=qh.front(),x=qx.front(),y=qy.front();
		qx.pop(),qy.pop(),qh.pop();//出队 
		++ans;//统计答案 
		for(int i=0;i<6;i++){
			int th=h+dh[i],tx=x+dx[i],ty=y+dy[i];
			if(th<=k&&th>=1&&tx>=1&&tx<=n&&ty>=1&&ty<=m&&a[th][tx][ty]=='.'){//不出界并且可以访问 
				qh.push(th);
				qx.push(tx);
				qy.push(ty);
				a[th][tx][ty]='#';//在这里标记,可避免TLE和MLE!!!(血泪的教训) 
			}
		}
	}
	printf("%d",ans);//输出答案 
	return 0;//不要用Ctrl+C+V,做诚信的人。 
}
//再见! 

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值