2013 Asia Hangzhou Regional Contest 部分题解

Stealing Harry Potter’s Precious
题意:给一个n * m的图,图上每一个点要么是’.’,要么是’@’,要么是’#’。’@‘表示起点,’.‘表示必经点,’#‘表示障碍点。规定从起点出发,每一步只能向上、下、左、或右走出一步,问至少经过多少步,可以在不经过障碍的情况下,使得’.'至少经过一次
思路:由于这道题目数据范围很小,n 与 m最大不超过100,k不超过4,所以我们就可以直接暴力枚举所有方案。

以k = 4位例
记4个点分别为ABCD,起点为O

= O A B C D / O A C B D / O A C D B . . . 方案 ={OABCD}/OACBD/OACDB... =OABCD/OACBD/OACDB...
明显方案数一共为4 * 3 * 2 * 1 = 24
对于每一种方法,我们只需要计算相邻两个顶点之间的最短距离,复杂度为O(N * M)
k = 4时最坏复杂度为O(N * M * 24)
k = 1 2 3 时复杂度明显小与O(N * M * 24)

所以做法就是直接根据k的大小,枚举所有路径上点经过的顺序,然后用bfs跑相邻两个端点的的最短路,就可以解决此问题。

AC代码

全部评论

相关推荐

点赞 评论 收藏
分享
北漂的牛马人:211佬,包进的,可能是系统问题
点赞 评论 收藏
分享
06-27 18:53
门头沟学院 Java
这样才知道自己不适合搞代码,考公去咯
只爱喝白开水:我也发现不适合搞代码,打算转非技术方向了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务