UVA10944 Nuts for nuts..

题目背景

最后,Ryan 和 Larry 觉得这些东西不是很好吃……然后他们在岛上发现了很多坚果!但由于他们很懒惰,所以他们想知道最少需要走多少距离才能吃到所有坚果。 为了帮他们强身健体,帮帮他们吧…… ![](https://cdn.luogu.com.cn/upload/image_hosting/68kj5kfv.png)

题目描述

给定一张大小为 $X$ 行 $Y$ 列的字符地图,其中 `L` 表示 Larry 的起点,`.` 表示空地,`#` 表示坚果。 Larry 既可以横着走,也可以**斜着走**。也就是说,两个格子之间的距离是**切比雪夫距离**而不是曼哈顿距离。 你的任务是帮助 Larry 求出拾取所有坚果,并且最多经过每个坚果一次,最后返回起点 `L` 的最短路径的长度。 **多组数据。** 保证每张地图最多只有 $15$ 处有坚果,且起点有且只有一处。地图的长度与宽度均不超过 $20$。 **请注意,部分数据里没有坚果。**

输入格式

多组数据。对于每组数据,第一行两个正整数 $X$ 和 $Y$,表示字符地图的行数和列数。 接下来 $X$ 行,每行一个长为 $Y$ 的字符串,表示 $X$ 行 $Y$ 列的的字符地图。 数据以 EOF(文件终止符)结尾。

输出格式

对于每组数据,输出一行一个整数表示答案。

说明/提示

原 PDF 里没有提到数据以 EOF(文件终止符)结尾。但是译者测试了 `while(scanf("%d %d",&X,&Y)!=EOF)solve();` 是可以通过此题的。在此说明。 ~~为什么 UVa 都这么喜欢多测?~~