问题 4221 --唐僧快跑

4221: 唐僧快跑

时间限制: 1 Sec  内存限制: 128 MB
提交: 34  解决: 18
[提交][状态][讨论版][命题人:]

题目描述

唐僧误入盘丝洞,盘丝洞错综复杂。但是唐僧得到了盘丝洞的地图。发现出口居然在盘丝洞的深处。

该地由M×N个方格组成,有的方格内有可以抓住唐僧的妖怪把守(众所周知,手无寸铁的唐僧是打不过凶神恶煞的妖怪的),而有的方格内则是安全。

现在唐僧想尽快脱险显然他应避开有妖怪的方格,并经过最少的方格。

快帮唐僧跑起来吧,RUN!RUN!RUN!

输入

输入有多组测试数据。

每组测试数据以两个非零整数 M 和 N 开始。M 表示盘丝洞行数, N 表示盘丝洞列数。

接下来有 M 行, 每行包含 N 个字符,不同字符分别代表不同含义:

1) ‘@’:唐僧所在的位置;
2) ‘.’:可以安全通行的方格;
3) ‘#’:有妖怪的方格;
4) ‘*’:出口位置。

当在一行中读入的是两个零时,表示输入结束。

输出

对于每组测试数据,分别输出一行,该行包含唐僧找到出口需要穿过的最少的方格数目(计数包括初始位置的方块)。

如果唐僧将要死在盘丝洞的话, 则输出 -1。

样例输入

8 8
.@##...#
#....#.#
#.#.##..
..#.###.
#.#...#.
..###.#.
...#.*..
.#...###
6 5
.*.#.
.#...
..##.
.....
.#...
....@
9 6
.#..#. 
.#.*.# 
.####. 
..#... 
..#... 
..#... 
..#... 
#.@.## 
.#..#. 
0 0

样例输出

10
8
-1

提示

1≤N,M≤300

来源

 

[提交][状态]