题目名称 994. [NOIP 2010冲刺三]鬼屋惊魂
输入输出 jumby.in/out
难度等级 ★★
时间限制 3000 ms (3 s)
内存限制 512 MiB
测试数据 10
题目来源 Gravatarsywgz 于2012-08-07加入
开放分组 全部用户
提交状态
分类标签
分享题解
通过:0, 提交:9, 通过率:0%
Gravatarconfoo 70 16.200 s 129.34 MiB C++
Gravatarconfoo 20 8.065 s 0.26 MiB C++
Gravatarconfoo 20 8.363 s 73.00 MiB C++
Gravatarconfoo 10 0.083 s 0.31 MiB C++
Gravatarconfoo 0 0.000 s 0.00 MiB C++
GravatarЯ люблю тебя  0 0.008 s 0.31 MiB C++
GravatarЯ люблю тебя  0 0.018 s 0.28 MiB C++
Gravatarconfoo 0 0.082 s 0.31 MiB C++
Gravatarconfoo 0 0.120 s 0.28 MiB C++
本题关联比赛
20120808
关于 鬼屋惊魂 的近10条评论(全部评论)
cogs辣鸡评测机!
uva能过
Gravatarconfoo
2016-10-27 11:52 1楼

994. [NOIP 2010冲刺三]鬼屋惊魂

★★   输入文件:jumby.in   输出文件:jumby.out   简单对比
时间限制:3 s   内存限制:512 MiB

【题目描述】


要求你写一个程序,在一个地图中,找到最小步数将每个鬼移动到他们指定的位置。地图包含一些小方格。每格要么是墙(鬼不能进入),要么是走廊(鬼能进入)。

每一步里,你可以同时移动任意数量的鬼。每个鬼要么待在原地不动,要么移动到相邻的格子里(相邻的格子有公共边),如果移动满足下列条件,则移动是可行的。

1. 没有一个以上的鬼在同一个格子里。

2. 没有一对鬼在一步里交换了位置。

例如,假设鬼的位置是如右上图所示的,其中 sharp(#) 表示墙,空格表示走廊, a , b , c 表示鬼:

####

 ab#

#c##

####

经过一步移动过后,地图可以变成如下的样子:

#### #### #### ####

  ab# a b# acb# ab  #

#c## #c## # ## #c##

#### #### #### ####


【输入格式】


输入包括最多 10 组数据,每组数据包含一幅地图。输入格式如下:

第一行的 w , h 和 n 表示地图的宽度和高度, n 表示鬼的数目,他们满足:

4 ≤ w ≤ 16, 4 ≤ h ≤ 16, 1 ≤ n ≤ 3

接下来 h 行,每行 w 个字符:

一个 # 表示墙。

一个小写字母表示鬼的初始位置(该位置也是走廊)。

一个大写字母表示鬼的目标位置(该位置也是走廊)。

一个空格表示空的走廊。

在每幅地图里,前 n 个小写字母和前 n 个大写字母表示鬼的初始位置及鬼的目标位置。我们需要将小写字母表示的鬼移动到对应的大写字母的位置里。

最后一组数据后一行有三个 0 。


【输出格式】

对每组数据输出一行一个整数,表示最小的移动步数。

【输入样例】


5 5 2

#####

#A#B#

#   #

#b#a#

#####

16 4 3

################

## ########## ##

#    ABCcba    #

################

16 16 3

################

### ##    #   ##

##  #  ##   # c#

#  ## ########b#

# ##  # #   #  #

#  # ##   # # ##

##  a#  # # #  #

### ## #### ## #

##   #   #  #  #

#  ##### # ## ##

####   #B# #   #

##  C#   #   ###

#  # # ####### #

# ######  A##  #

#        #    ##

################


【输出样例】


7

36

77