2013 Asia Hangzhou Regional Contest 部分题解

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

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

= O A B C D / O A C B D / O A C D B . . . 方案 ={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)ubuntu

因此作法就是直接根据k的大小,枚举全部路径上点通过的顺序,而后用bfs跑相邻两个端点的的最短路,就能够解决此问题。app

AC代码svg