在一个网格地图上,有n个小矮人和n个房子,每个房子只能容纳一个小矮人。在单位时间里,每个小矮人可以水平或者垂直方向移动一格到一个相邻点。对每个小矮人,他每移动一格,需要支付1美元旅行费用,直到他进入房子。
编程任务:把n个小矮人送进n个不同的房子,所需要支付的最少费用。输入是一个网格矩阵,其中“.”表示空地,“H”代表一个房子,“m”表示一个小矮人。
你可以把网格地图上的每个方格,看成是一个大广场,同时可以容纳n个小矮人。而且,小矮人可以路过一个有房子的方格而不进入房子。
在一个网格地图上,有n个小矮人和n个房子,每个房子只能容纳一个小矮人。在单位时间里,每个小矮人可以水平或者垂直方向移动一格到一个相邻点。对每个小矮人,他每移动一格,需要支付1美元旅行费用,直到他进入房子。
编程任务:把n个小矮人送进n个不同的房子,所需要支付的最少费用。输入是一个网格矩阵,其中“.”表示空地,“H”代表一个房子,“m”表示一个小矮人。
你可以把网格地图上的每个方格,看成是一个大广场,同时可以容纳n个小矮人。而且,小矮人可以路过一个有房子的方格而不进入房子。
有一个或多个测试例。对每个测试例,第一行是两个整数n和m,分别表示网格地图的行数和列数。接下来n行是描述网格地图的。可以假定n和m的范围是2~100。地图上,“H”和“m”的数量是相同的,房子的数量最多是100。当n和m是“0 0”时,表示输入结束。
对每个测试例输出一行,是一个整数:需要付出的最少费用。
2 2 .m H. 5 5 HH..m ..... ..... ..... mm..H 0 0
2 10