英文
Time Limit:1s Memory Limit:256M
Description
Given a n*m map.A “Mengxin” is trapped.You are the one to rescue him.In the map,there are some guards,you must defeat the guards to get your way.Defeat one guard takes 1 min,move one step takes 1 min,each step you can only take one of 4 directions(up,down,left,right).Please tell us the least time you cost to rescue the guy.
Input
The first line contains two integers n,m
The next n lines,each line input m characters represent the map. 1<=n,m<=200
‘@’ is your position
‘#’ is obstacle
‘.’ means there is a way you can go
‘G’ means guard
‘M’ means the position of “Mengxin”.
Output
If you can save this guy,output the least time you cost,else,output “You can’t save Mengxin”
Sample Input1
7 8
#.#####.
#.M#..@.
#..#G...
..#..#.#
#...##..
.#......
........
Sample Output1
13
Sample Input2
2 2
M.
G@
Sample Output2
2
中文
时间:1s 空间:128M
题目描述:
在一个n∗m的迷宫里,有一个萌新被困住了,你作为一个久经码场的战士,决定去营救萌新。地图中还会有一些守卫,你必须打败守卫才能通过守卫所在的位置,打败守卫需要花费1分钟,移动一步需要花费一分钟,每次你只能往上下左右某个方向移动一步。问你最少需要花费多少时间才能救到萌新。
输入格式:
第一行输入两个整数 n,m
接下来n行每行输入m个字符
‘#’代表障碍物,无法直接通过
‘.’代表空地,可以直接通过
‘G’代表守卫,你需要打败他才能通过
‘M’代表萌新所在的位置
‘@’表示你所在的位置
输出格式:
如果可以营救到萌新,就输出最少需要花费的分钟数
如果不可以,输出“You can’t save Mengxin”
样例输入1:
7 8
#.#####.
#.M#..@.
#..#G...
..#..#.#
#...##..
.#......
........
样例输出1:
13
样例输入2:
2 2
M.
G@
样例输出2:
2
约定:
1<=n,m<=200
注意:
以上输入样例中,用到的代码片不是代码,只是为了方便表示,谢谢。
提示:
这道题求的是最优解,很容易就想到广度优先搜索(又称宽度优先搜,BFS),最先在队列里遇到的答案一定就是最