拼多多2018暑期实习招聘在线编程题:迷宫寻路

这是一道关于迷宫寻路的编程题,探险家需从起点找最短路径到出口。迷宫用二维矩阵表示,包含墙、路、起始点、出口和门。门需对应钥匙才能通行。题目要求找到脱困的最短路径长度。解决方案包括使用字符串作为钥匙串,遇到钥匙则添加,遇到门时检查是否有对应钥匙。提供的C++代码实现仅针对单个输入案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:一个探险家被困在地底迷宫中,要从当前位置开始找一条通往迷宫出口的路径。迷宫用一个二维矩阵表示,有的部分是墙,有的部分是路。迷宫之中有的路上还有门,每扇门都在迷宫的某个地方有与之匹配的钥匙,只有先拿到钥匙才能打开门。请帮探险家找到脱困的最短路径。二维矩阵中,0表示墙,1表示路,2表示起始位置,3表示迷宫出口。大写字母表示门,小写字母对应大写字母所代表的门的钥匙。

输入描述:

迷宫的地图,用二维矩阵表示。第一行是矩阵的行数和列数M和N。后面的M行是矩阵的数据,每一行对应矩阵的一行(中间没有空格)。M和N都不超过100,门不超过10扇。

输出描述:路径的长度,是一个整数。

输入:

5 5

02111

01a0A

01003

0101B

0b111

输出:

7

说明:

输出7,对应的路径为:(0,1)、(0,2)、(1,2)、(0,2)、(0,3)、(0,4)、(1,4)、(2,4)。无需输出路径

走迷宫问题在一般情况下都要求形成一个简单路径,也就是说,同一个通道在路径上最多只能出现1次。但是这道题不能这样,因为有时候可能需要到某个地方寻找钥匙,这样就需要走回头路(比如例题中的解答)。这里要把条件放宽,变成:“同一个通道在路径上最多可以出现两次”。

这道题就是典型的迷宫寻路问题,只是有一点小变化:穿过门需要对应的钥匙。其实很好办:用一个字符串(姑且把它视为钥匙串)。如果路上遇到钥匙,就将这把钥匙加进钥匙串中。遇到门时,如果钥匙串中有能打开这扇门的钥匙,就可以通过,否则无法通过(视为墙壁)。

下面是我的C++代码。为了方便起见,就不按照在线编程的要求进行多次重复输入验证了,只测试一个输入。

#include <iostream>
#include <vector>
#include <string>

using namespace std;

void search(const vector<string>& matrix, vector<vector<int>> left, int& result,int startx, int starty, int endx, int endy,string keys, int count, int m, int n) {
	if (startx == endx && starty == endy) {
		//到达终点
		if (count < result) result = count;
	}
	else {
		//从起点往四个方向搜索
		vector<vector<int>> tmpleft;
		string tmpkeys;
		if (startx + 1 < m && left[startx + 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值