实现BFS之“营救”

本文介绍了如何使用广度优先遍历(BFS)算法解决地图搜索问题,目标是寻找从Angel的朋友到Angel的最短路径。在给定的地图中,障碍物是墙壁和警卫,每步移动或消灭警卫都需要相同的时间。通过BFS算法,可以计算出至少需要的时间。当无法找到路径时,输出特殊提示。文章提供了样例输入和输出,以及C++代码实现。
摘要由CSDN通过智能技术生成

广度优先遍历(Breadth First Search,BFS)是一个分层的搜索过程,没有回退过程,是非递归的。


DFS与BFS的小秘密:

1、深度优先搜索算法的思路很简单,比较好理解,但得到的解不是最优的;而广度优先搜索则恰恰相反;

2、如果节点有无穷多个,深度优先搜索算法在某处分支可以无限搜索下去却找不到解,这时我们可以采用有界深度优先搜索~


题目来源:

ZOJ Monthly,October 2003,ZOJ1649

题目描述:

Angel被MOLIGPY抓住了,她被关在监狱里。监狱可以用一个N*M的矩阵来描述,1<N、M<=200。监狱由N*M个格子组成,每个方格中可能为墙壁、道路、警卫、Angel或Angel的朋友。Angel的朋友想去营救Angel。他的任务是接近Angel。约定“接近Angel”的意思是到达Angel被关的位置。如果Angel的朋友想到达某个方格,但方格中有警卫,那么必须杀死警卫,才能到达这个方格。假定Angel的朋友向上、下、左、右移动一步用时1个单位时间,杀死警卫也用时1个单位时间。假定Angel的朋友可以杀死所有警卫。

试计算Angel的朋友接近Angel至少需要多长时间,只能向上、下、左、右移动,而且墙壁不能通过。

输入描述:

输入文件中包含多个测试数据。每个测试数据的第1行为两个整数N和M,接下来有N行,每行有M个字符:"."代表道路,"a"代表Angel,"r"代表Angel的朋友,"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值