首页 > 其他分享 >2.地牢大师(简单搜索 BFS)

2.地牢大师(简单搜索 BFS)

时间:2023-05-01 23:12:14浏览次数:45  
标签:地牢 int BFS edz ##### edy edx 大师

地牢大师

↑ 题目链接

题目

你现在被困在一个三维地牢中,需要找到最快脱离的出路!
地牢由若干个单位立方体组成,其中部分不含岩石障碍可以直接通过,部分包含岩石障碍无法通过。
向北,向南,向东,向西,向上或向下移动一个单元距离均需要一分钟。
你不能沿对角线移动,迷宫边界都是坚硬的岩石,你不能走出边界范围。
请问,你有可能逃脱吗?
如果可以,需要多长时间?

输入格式

输入包含多组测试数据。

每组数据第一行包含三个整数 $ L,R,C $ 分别表示地牢层数,以及每一层地牢的行数和列数。接下来是 \(L\) 个 \(R\) 行 \(C\) 列的字符矩阵,用来表示每一层地牢的具体状况。
每个字符用来描述一个地牢单元的具体状况。
其中, 充满岩石障碍的单元格用”#”表示,不含障碍的空单元格用”.”表示,你的起始位置用”S”表示,终点用”E”表示。
每一个字符矩阵后面都会包含一个空行。
当输入一行为0 0 0时,表示输入终止。

输出格式

每组数据输出一个结果,每个结果占一行。

如果能够逃脱地牢,则输出Escaped in x minute(s).,其中X为逃脱所需最短时间。

如果不能逃脱地牢,则输出Trapped!

数据范围

\(1≤L,R,C≤100\)

输入样例:

3 4 5
S....
.###.
.##..
###.#

#####
#####
##.##
##...

#####
#####
#.###
####E

1 3 3
S##
#E#
###

0 0 0

输出样例:

Escaped in 11 minute(s).
Trapped!

思路

三维地图,利用BFS搜索最短距离即可

  • 搜索过程中的每个位置需要向六个方向偏移,需要偏移量数组
  • 偏移点需满足的要求:不越界,未走过,不能是墙#

代码

#include<bits/stdc++.h>
using namespace std;
const int N=110;
char g[N][N][N];
int dx[]={-1,0,1,0,0,0},dy[]={0,1,0,-1,0,0},dz[]={0,0,0,0,1,-1};
int n,m,C;
int d[N][N][N];

struct Pos
{
	int x,y,z;
};

void bfs(int x,int y,int z)
{
	queue<Pos>q;
	q.push({x,y,z});
	d[x][y][z]=0;
	
	while(q.size())
	{
		auto t=q.front();
		q.pop();
		
		for(int i=0;i<6;i++)
		{
			int a=t.x+dx[i],b=t.y+dy[i],c=t.z+dz[i];
			if(a<0||a>=n||b<0||b>=m||c<0||c>=C||d[a][b][c]!=-1||g[a][b][c]=='#')continue;
			d[a][b][c]=d[t.x][t.y][t.z]+1;
			q.push({a,b,c});
		}
		
	}
	
}
int main()
{
	while(cin>>C>>n>>m,n&&m&&C)
	{
		memset(d,-1,sizeof d);
		int stx,sty,stz;
		int edx,edy,edz;
		for(int k=0;k<C;k++)
		{
			for(int i=0;i<n;i++)
			{
				for(int j=0;j<m;j++)
				{
					cin>>g[i][j][k];
					if(g[i][j][k]=='S')stx=i,sty=j,stz=k;
					if(g[i][j][k]=='E')edx=i,edy=j,edz=k;
				}
			}
		}
		
		bfs(stx,sty,stz);
		
		int t=d[edx][edy][edz];
		if(t==-1)puts("Trapped!");
		else printf("Escaped in %d minute(s).\n",t);
	}
	
	
	return 0;
}

标签:地牢,int,BFS,edz,#####,edy,edx,大师
From: https://www.cnblogs.com/zzmxj/p/17367156.html

相关文章

  • PB反编译大师,PB反编译升级版本
    最新网址  http://www.pbdecompiler.com镜像网址 http://tx.mis2erp.com:8000/pagecn.html1).反编译powerbuilder编译后的pbd文件,支持版本5,6.5,7,8,9,10,10.5,11,11.5,12,12.5,12.6,PKB2.5,共计13个版本。2).主要用于工程文档丢失后的恢复,即工程恢复。3).在此demo中释放出全部版本作为测......
  • 写代码犹如写文章: “大师级程序员把系统当故事来讲,而不是当做程序来写” | 如何架构
    “大师级程序员把系统当故事来讲,而不是当做程序来写”写代码犹如写文章好的代码应该如好文章一样表达思想,被人读懂。中心思想:突出明确程序是开发者用编程语言写成的一本书,首先应该是记录开发者对业务需求分析、系统分析,最终用软件实现所思所想的知识的记录与传承。然后再是完成程......
  • BFS 简单应用
    前言:BFS即广度优先搜索(或宽度优先搜索),具体定义和实现不在赘述。本文所有代码前的开头头文件,宏定义和命名空间如下(只是一些常用的define和一个快读):#include<bits/stdc++.h>#defineTptemplate<typenameTy>#defineTstemplate<typenameTy,typename...Ar>#definell......
  • 胎教级培训手册:四步让ChatGPT成为小红书爆款大师
    文/高扬 最近公众号更新有些慢,因为我在配合陈楚做小红书。 ChatGPT用在小红书上具有天然优势,然后再接合AI绘画,更是绝配。 AI绘画,陈楚已经研究很久了,后续会不断地输出教程。 学太多ChatGPT技巧,大家好像并没有感觉到能带来什么好处,可是,假如ChatGPT能给自己带来切身利......
  • codeforces 505B B. Mr. Kitayuta's Colorful Graph(bfs)
    题目链接:codeforces505B题目大意:给出一个有向图,边有不同的颜色,任意给出查询,查询两点能够只通过一种颜色连通的颜色的种类数。题目分析:根据不同颜色建边,bfs即可,队列维护可用的点。AC代码:#include<iostream>#include<cstring>#include<cstdio>#include<vector>#include<alg......
  • C51笔记-郭天祥-第二章 从点灯大师开始
    第2章  Keil软件的使用及流水灯设计 Keil的用法:用Keil建立工程;            工程配置;            C51单片机程序软件仿真、单步、全速、断点设置和变量查看等; 用一个完整的C51程序操控LED亮灭;调用库函数实现流水灯;蜂鸣器与继电器的操作方法,集......
  • bfs与dfs详解(经典例题 + 模板c-代码)
    文章目录模板+解析dfsbfs1562.微博转发3502.不同路径数165.小猫爬山模板+解析DFS(深度优先搜索)和BFS(广度优先搜索)是图论中两个重要的算法。dfs其中DFS是一种用于遍历或搜索树或图的算法,BFS则是一种用于搜索或遍历树或图的算法。两种算法都有其自身的优点和缺点,应用于不同的场景中......
  • 图结构练习——BFSDFS——判断可达性
    图结构练习——BFSDFS——判断可达性TimeLimit:1000MSMemorylimit:65536K题目描述 输入第一行包含两个整数n,m(分别代表n个隘口,这些隘口之间有m个通道)。下面m行每行包含两个整数a,b;表示从a出发有一条通道到达b隘口(注意:通道是单向的)。输出......
  • POJ3984 迷宫问题(BFS 记忆路径)
    迷宫问题TimeLimit:1000MS     MemoryLimit:65536KB     64bitIOFormat:%I64d&%I64uSubmit Status Practice POJ3984SystemCrawler (2014-09-11)Description定义一个二维数组: intmaze[5][5]={0,1,0,0......
  • nyoj 坦克大战 284 (bfs) 模板
    坦克大战1000ms |          内存限制:655353Manyofushadplayedthegame"Battlecity"inourchildhood,andsomepeople(likeme)evenoftenplayitoncomputernow.Whatwearediscussingisasimpleeditionofthisgame.Givena......