藏宝图
时间限制:1秒 内存限制:256M
【题目描述】
有一张类似迷宫的藏宝图,其中有一些障碍物(从一个无障碍格子可以上下左右走到相邻的无障碍格子中)。手动清除不同的障碍物耗时可能不同。图中的某一点藏有宝藏。有些点不可通过。在边界上有一些入口,有的入口会提供若干个炸药。用炸药清除障碍物和在迷宫中移动则认为不花费时间。一旦从某个入口进入迷宫,则不能再走到任何一个入口。例如下图表示一个迷宫:
‘*’ 表示无法通过的点,数字 1..9 表示障碍物以及手动清除该障碍物所需时间。‘.’表示空地。‘$’表示宝藏。‘#’和字母 ‘A’..‘Z’ 都表示入口,‘#’ 表示该入口无炸药提供,字母表示该入口提供的炸药数目。‘A’ 表示一个炸药,‘B’ 表示两个炸药,依次类推。迷宫的边框上只有 ‘#’、‘*’ 和 字母。
上图如果选择从 ‘#’ 进入迷宫,则不能再走进 ‘A’。此时走到宝藏,则需要 10 个单位时间。如果选择从 ‘A’ 进入迷宫则会提供 1 个炸药,炸掉 9 障碍物不花时间,手动清除 1 花费 1 个单位时间,所以总共只需 1 个单位时间即可。
目的是求最少所需单位时间到达宝藏。
【输入格式】
输入一张地图,描述如上。
【输出格式】
如果能找到宝藏,则输出走到宝藏最少所需时间,否则输出"IMPOSSIBLE"。
【输入输出样例】
Input
*#******A*
*........*
*9********
*........*
********1*
*$.......*
**********
Output
1
【数据限制】
对于 \(100\%\) 的数据,地图的长宽大于等于3,小于等于100。
【来源】
Mr.he