欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【线性规划与网络流24题】孤岛营救问题 分层图

发布时间:2025/3/18 编程问答 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【线性规划与网络流24题】孤岛营救问题 分层图 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

孤岛营救问题

Time Limit: 1 Sec  Memory Limit: 128 MB

Description

1944年,特种兵麦克接到国防部的命令。要求马上赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩。瑞恩被关押在一个迷宫里,迷宫地形复杂,但幸好麦克得到了迷宫的地形图。迷宫的外形是一个长方形,其南北方向被划分为 N行,东西方向被划分为 M列,于是整个迷宫被划分为 N×M个单元。每个单元的位置可用一个有序数对 (单元的行号,单元的列号)来表示。南北或东西方向相邻的 2个单元之间可能互通,也可能有一扇锁着的门。或者是一堵不可逾越的墙。

迷宫中有一些单元存放着钥匙,而且全部的门被分成 P类。打开同一类的门的钥匙同样,不同类门的钥匙不同。

大兵瑞恩被关押在迷宫的东南角。即(N,M)单元里,并已经昏迷。

迷宫仅仅有一个入口,在西北角。

也就是说,麦克能够直接进入(1,1)单元。

另外,麦克从一个单元移动到还有一个相邻单元的时间为 1。拿取所在单元的钥匙的时间以及用钥匙开门的时间可忽略不计。 

试设计一个算法,帮助麦克以最快的方式到达瑞恩所在单元。营救大兵瑞恩。

 

Input

第 1行有 3个整数。分别表示 N,M,P的值。


第 2行是 1个整数 K,表示迷宫中门和墙的总数。
第 I+2行(1<=I<=K),有 5个整数。依次为 Xi1,Yi1,Xi2,Yi2,Gi:
当 Gi>=1时。表示(Xi1,Yi1)单元与(Xi2,Yi2)单元之间有一扇第 Gi类的门。
当 Gi=0时,表示(Xi1,Yi1)单元与(Xi2,Yi2)单元之间有一堵不可逾越的墙(当中,|Xi1-Xi2|+|Yi1-Yi2|=1, 0<=Gi<=P)。

第 K+3行是一个整数 S,表示迷宫中存放的钥匙总数。
第 K+3+J行(1<=J<=S)。有 3个整数,依次为 Xi1,Yi1,Qi:表示第 J把钥匙存放在(Xi1,Yi1)单元里,而且第 J把钥匙是用来开启第 Qi类门的。(当中 1<=Qi<=P)。


输入数据中同一行各相邻整数之间用一个空格分隔。 

 

Output

输出麦克营救到大兵瑞恩的最短时间的值。假设问题无解,则输出-1。

Sample Input

4 4 991 2 1 3 21 2 2 2 02 1 2 2 02 1 3 1 02 3 3 3 02 4 3 4 13 2 3 3 03 3 4 3 04 3 4 4 022 1 24 2 1

Sample Output

14

HINT

N,M,P <= 10

K < 150

Source

网络流24题


    题意不多说了。自己读题就好了。然后要注意的是每一个点可能有多个钥匙,两个房间之间不可能须要连穿两扇门。还有就是推断两个房间能不能通过的时候不必枚举二进制下每位是0还是1,直接如果门须要的钥匙为y,而当前代表钥匙01串的数是x,那么能够把门的钥匙设为(1<<y),则if(x%((1<<y)*2) >=(1<<y))就能够了。试想,把前面的钥匙去掉。然后剩下的钥匙若能开,hash值一定>=门号,否则你懂得。不多说了,不懂?手模拟。。

    建边时候注意点,转移时注意点。非常快就能水过。

不会分层图的同学看这个:http://blog.csdn.net/vmurder/article/details/40075989

}









本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5077989.html,如需转载请自行联系原作者


总结

以上是生活随笔为你收集整理的【线性规划与网络流24题】孤岛营救问题 分层图的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。