星闪迷宫
时间限制:1秒 内存限制:256M
【题目描述】
星闪迷宫中的一些格子中安装有星闪装置,每套装置连接着两个不同的格子,人一旦进入其中一个格子,会被瞬时转移到另一个格子中。其他没有星闪装置的格子,有一些是无法通行的坏格子,有一些则是可以通行的好格子。
小C正在探索该迷宫,他每一步可以走到上下左右相邻格子中的一个,花费一个单位时间,从星闪装置的一个格子到另一个格子花费时间为0。他希望尽快走出迷宫,请你算一算需要的最短时间。
【输入格式】
第一行是整数 \(N\) 和 \(M\),表示迷宫有 \(N\) 行 \(M\) 列。
接下来 \(N\) 行,其中第 \(i+1\) 行描述了迷宫中的第 \(i\) 行每个格子的情况,若是字符 '#' 表示坏格子,字符'.'表示好格子,字符'@'表示小C的起点,字符'='表示迷宫出口,大写字母表示一个套星闪装置,大写字母必然是成对的,表示装置连接的两个格子。
【输出格式】
一个整数,表示小C走出迷宫的最短时间。
【输入输出样例】
Input
5 6
###=##
#.D.##
#.####
#.@D##
######
Output
3
【样例解释】
迷宫中唯一的一个装置的结点用大写字母'D'表示。用时最少的走出迷宫方案为:先向右走到装置的结点,花费一个单位时间,再到装置的另一个结点上,花费 0 个单位时间,然后再向右走一个,再向上走一个,到达出口处,总共花费了 3 个单位时间。
【数据限制】
对于 \(100\%\) 的数据,\(2 ≤ N, M ≤ 300\)。
【来源】
Mr.he