PTA 1091 Acute Stroke

这篇博客探讨了一种三维空间搜索问题的解决方案,由于深度优先搜索(DFS)可能导致段错误,作者选择了使用广度优先搜索(BFS)。通过定义节点结构、判断函数和BFS实现,对给定的地图进行遍历,寻找满足条件的路径数量。博客内容涉及图论、搜索算法和数据结构的应用。
摘要由CSDN通过智能技术生成

题目描述

在这里插入图片描述
在这里插入图片描述

分析:

三维的搜索题,dfs会因为深度太深导致出现段错误,使用bfs进行搜索
#include<cstdio>
#include<queue>
using namespace std;

struct node{
	int x,y,z;
};
int M,N,L,T;
int map[1290][135][65];
bool visit[1290][135][65]={false};

int X[6]={0,0,0,0,1,-1};
int Y[6]={0,0,1,-1,0,0};
int Z[6]={1,-1,0,0,0,0};

bool judge(int x,int y,int z){
	if(x>=N||x<0||y>=M||y<0||z>=L||z<0){
		return false;
	}
	if(map[x][y][z]==0||visit[x][y][z]==true){
		return false;
	}
	return true;
}

int BFS(int x,int y,int z){
	queue<node>q;
	node temp;
	temp.x=x;
	temp.y=y;
	temp.z=z;
	q.push(temp);
	int num=0;
	visit[x][y][z]=true;
	while(!q.empty()){
		node now=q.front();
		q.pop();
		num++;
		for(int i=0;i<6;i++){
			int dx=now.x+X[i];
			int dy=now.y+Y[i];
			int dz=now.z+Z[i];
			if(judge(dx,dy,dz)){
					temp.x=dx;
	                temp.y=dy;
	                temp.z=dz;
                    q.push(temp);
                    visit[dx][dy][dz]=true;
			}
		}
	}
	if(num>=T) return num;
	else return 0;
}

int main(){
	scanf("%d%d%d%d",&N,&M,&L,&T);
	for(int z=0;z<L;z++)
	for(int x=0;x<N;x++)
	for(int y=0;y<M;y++){
		scanf("%d",&map[x][y][z]);
	}
	int num=0;
	for(int z=0;z<L;z++)
	for(int x=0;x<N;x++)
	for(int y=0;y<M;y++){
		if(map[x][y][z]==1&&!visit[x][y][z])
		num+=BFS(x,y,z);
	}
	printf("%d\n",num);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值