问题 2059 --回家

2059: 回家★★★★★

时间限制: 1 Sec  内存限制: 128 MB
提交: 26  解决: 20
[提交][状态][命题人:]

题目描述

在一个网格地图上,有n个小矮人和n个房子,每个房子只能容纳一个小矮人。在单位时间里,每个小矮人可以水平或者垂直方向移动一格到一个相邻点。对每个小矮人,他每移动一格,需要支付1美元旅行费用,直到他进入房子。

编程任务:把n个小矮人送进n个不同的房子,所需要支付的最少费用。输入是一个网格矩阵,其中.”表示空地,“H”代表一个房子,“m”表示一个小矮人。

你可以把网格地图上的每个方格,看成是一个大广场,同时可以容纳n个小矮人。而且,小矮人可以路过一个有房子的方格而不进入房子。

输入

有一个或多个测试例。对每个测试例,第一行是两个整数nm,分别表示网格地图的行数和列数。接下来n行是描述网格地图的。可以假定nm的范围是2100。地图上,“H”和“m”的数量是相同的,房子的数量最多是100。当nm是“0 0”时,表示输入结束。

输出

对每个测试例输出一行,是一个整数:需要付出的最少费用。

样例输入
Copy
2 2
.m
H.
5 5
HH..m
.....
.....
.....
mm..H
0 0
样例输出
Copy
2
10

提示

来源

 

[提交][状态]