题目名称 44. [CTSC 1999] 拯救大兵瑞恩
输入输出 rescue.in/out
难度等级 ★★
时间限制 1000 ms (1 s)
内存限制 256 MiB
测试数据 5
题目来源 GravatarBYVoid 于2008-07-07加入
开放分组 全部用户
提交状态
分类标签
搜索法 最短路 分层图
分享题解
通过:113, 提交:259, 通过率:43.63%
Gravatar槿柒 100 0.000 s 0.00 MiB C++
GravatarYoungsc 100 0.000 s 0.00 MiB C++
Gravatarop_组撒头屯 100 0.000 s 0.00 MiB C++
Gravataryrtiop 100 0.000 s 0.00 MiB C++
GravatarChtholly 100 0.000 s 0.00 MiB C++
GravatarTARDIS 100 0.001 s 0.29 MiB C++
Gravatar诺亚 100 0.001 s 0.57 MiB C++
Gravatar金身人面兽 100 0.001 s 1.09 MiB C++
Gravatar该账号已注销 100 0.001 s 1.30 MiB C++
GravatarMakazeu 100 0.002 s 0.76 MiB C++
关于 拯救大兵瑞恩 的近10条评论(全部评论)
BFS
Gravataryrtiop
2022-03-14 20:46 18楼
在本地完美运行,
但是为何交上去第一点就RE了??(第一个点就是样例!!)
Gravatar帅气的背影
2018-10-14 19:35 17楼
妈的一个位置可以有好多个钥匙...
第4个点好坑...
GravatarCSU_Turkey
2017-08-03 19:23 16楼
竟然毁在M,N上了

有一个数据太坑了,一个点好多钥匙...

论不看评论的危害
Gravatar小e
2016-11-01 07:17 15楼
有一个数据太坑了,一个点好多钥匙...
GravatarGo灬Fire
2016-09-16 15:57 14楼
竟然毁在M,N上了
GravatarSOBER GOOD BOY
2016-09-15 14:26 13楼
四维数组相当好用呀@Cir
GravatarMagic_Sheep
2016-08-13 19:20 12楼
位运算表状态的搜索水题,居然因为忘记到达不了的输出-1而WA一次。。
Gravatar_Itachi
2016-08-13 06:34 11楼
Gravatar6+1
2016-03-15 19:36 10楼
暴力也可以啊
Gravatar粘粘自喜
2016-03-15 18:05 9楼

44. [CTSC 1999] 拯救大兵瑞恩

★★   输入文件:rescue.in   输出文件:rescue.out   简单对比
时间限制:1 s   内存限制:256 MiB

【题目描述】

$1944$年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩。瑞恩被关押在一个迷宫里,迷宫地形复杂,但是幸好麦克得到了迷宫的地形图。

迷宫的外形是一个长方形,其在南北方向被划分为$N$行,在东西方向被划分为$M$列,于是整个迷宫被划分为$N*M$个单元。我们用一个有序数对(单元的行号,单元的列号)来表示单元位置。南北或东西方向相邻的两个单元之间可以互通,或者存在一扇锁着的门,又或者存在一堵不可逾越的墙。迷宫中有一些单元存放着钥匙,并且所有的门被分为$P$类,打开同一类的门的钥匙相同,打开不同类的门的钥匙不同。

大兵瑞恩被关押在迷宫的东南角,即$(N,M)$单元里,并已经昏迷。迷宫只有一个入口,在西北角,也就是说,麦克可以直接进入$(1,1)$单元。另外,麦克从一个单元移动到另一个相邻单元的时间为$1$,拿取所在单元的钥匙的时间以及用钥匙开门的时间忽略不计。
你的任务是帮助麦克以最快的方式抵达瑞恩所在单元,营救大兵瑞恩。

【输入格式】

第一行是三个整数,依次表示$N,M,P$的值;
第二行是一个整数$K$,表示迷宫中门和墙的总个数;
第$I+2$行$(1<=I<=K)$,有$5$个整数,依次为$Xi_1,Yi_1,Xi_2,Yi_2,G_i$:
当$G_i>=1$时,表示$(Xi_1,Yi_1)$单元与$(Xi_2,Yi_2)$单元之间有一扇第$G_i$类的门,当$G_i=0$时,表示$(Xi_1,Yi_1)$单元与$(Xi_2,Yi_2)$单元之间有一堵不可逾越的墙;
(其中,$|Xi_1-Xi_2|+|Yi_1-Yi_2|=1,0<=G_i<=P$)
第$K+3$行是一个整数$S$,表示迷宫中存放的钥匙总数;
第$K+3+E$行$(1<=E<=S)$,有$3$个整数,依次为$Xi_1,Yi_1,Q_i$:表示第$E$把钥匙存放在$(Xi_1,Yi_1)$单元里,并且第$E$把钥匙是用来开启第$Q_i$类门的。(其中$1<=Q_i<=P$)
注意:输入数据中同一行各相邻整数之间用一个空格分隔。

【输出格式】

输出文件只包含一个整数T,表示麦克营救到大兵瑞恩的最短时间的值,若不存在可行的营救方案则输出$-1$。

【输入样例】

4 4 9
9
1 2 1 3 2
1 2 2 2 0
2 1 2 2 0
2 1 3 1 0
2 3 3 3 0
2 4 3 4 1
3 2 3 3 0
3 3 4 3 0
4 3 4 4 0
2
2 1 2
4 2 1

【输出样例】

14

【数据范围】

$3<=N,M<=15;1<=P<=10;$