#include <iostream>
#include <cstring>
#include <queue>
#include <vector>
#include <map>
#define x first
#define y second
using namespace std;
typedef pair <int,int> PII;
const int N = 310;
int n,m;
int sx,sy,ex,ey;
char g[N][N];
int dist[N][N];
bool vis[N][N];
vector <PII> transport[26];
map <PII,PII> mp;
int dx[] = {0,0,1,-1},dy[] = {1,-1,0,0};
int bfs () {
queue <PII> q;
q.push ({sx,sy});
dist[sx][sy] = 0;
while (!q.empty ()) {
PII t = q.front ();
q.pop ();
int d = dist[t.x][t.y];
if (t.x == ex && t.y == ey) return d;
for (int i = 0;i < 4;i++) {
int a = t.x + dx[i],b = t.y + dy[i];
if (a < 1 || a > n || b < 1 || b > m || g[a][b] == '#' || vis[a][b]) continue;
if (isalpha (g[a][b])) {
PII p = {a,b};
a = mp[p].x,b = mp[p].y;
}
else vis[a][b] = true;
q.push ({a,b});
dist[a][b] = dist[t.x][t.y] + 1;
}
}
return -1;
}
int main () {
cin >> n >> m;
for (int i = 1;i <= n;i++) cin >> g[i] + 1;
for (int i = 1;i <= n;i++) {
for (int j = 1;j <= m;j++) {
if (g[i][j] == '@') sx = i,sy = j;
else if (g[i][j] == '=') ex = i,ey = j;
else if (isalpha (g[i][j])) transport[g[i][j] - 'A'].push_back ({i,j});
}
}
for (char i = 0;i < 26;i++) {
if (transport[i].size () % 2 != 0 || !transport[i].size ()) continue;
PII a = transport[i][0],b = transport[i][1];
mp[a] = b,mp[b] = a;
}
cout << bfs () << endl;
return 0;
}
一下数据map会失灵???
input:
50 50
##################################################
#DC#A#B..C.D#X.................#........#....#...#
#..#.###.####..................#....#...#..#.#.#.#
#..#..#..##.#..................#....#...#..#.#.#.#
#..#..###...#..................#....#...#..#.#.#.#
#..##..##...#..................#....#...#..#.#.#.#
#.J#I#.......############......#....#...#..#.#.#.#
#..##.#.#.#..#.#.....#.........#....#...#..#.#.#.#
#..#..............##.#..#......#....#...#..#.#.#.#
#..#.......#####...#.#..#......#....#...#..#.#.#.#
#..#.......#S......#.####......#....#...#..#.#.#.#
#..#..######.......#....#......#....#...#..#.#.#.#
#..#..#.............#..M#...........#......#...#.#
##.#####.#.#####################################.#
#..####.........#######....T.U.V..W....V..T..U..W#
#.#####.###############.##########################
#..#.....#..............#.#..#.#...#....#........#
#..#.....#..###########.#...#.#..#...#.....#..#..#
#.E#.....#..#....#..#...####.#.#..#...#.....#....#
#.##......#.#..#..#..#......#.#.#..#...#.....#..S#
#..#.######.#...#..#..#.####.#.#..#...#.....#....#
#..#......#.###..#..#...#...#.#..#...#.....#.#...#
#..######.#.#...###..#..#.#..#.#...#....#.....#..#
#......M#.###......#....#.#..#.#..#..#.#...#.....#
#.#######.#.#.####################################
#.........#.....................................K#
##################################################
#..#...#..........#...#..#................#.....##
#.........#...#..#.......##.#.....#.#....##.#..#K#
#....#.#..........#..#..#...#..#....#....#...#...#
#...........#.....#...............#..............#
##############################.###################
#.........F.....G....H.....G.....I...H......F....#
#.##############################################.#
#.#........#...................................#.#
#J#...###...###...#...###.....###.#...#..###...#.#
##....#..#..#....#.#..#..#....#...##..#..#..#..#.#
#.....#B..#.###.#####.#...#...###.#.#.#..#...#.#.#
#.....#..#..#...#...#.#..#....#...#..##..#..#..#.#
####..###...###.#...#.###.....###.#...#..###...#.#
#..........#...................................#.#
#.##########...................................#.#
#........#........N.N.O.O.R.R.................##.#
########.#.................................###...#
#........#..........................########....Y#
#........######..#Q.#...#############......#######
#.#......#...L#..####...#....#....#.#.....Q#X#...#
#.##.....#..###.........#..#.#..#...########.#Z#.#
#@..APPLE#.....#...........#....#.........Y#.Z.#.=
##################################################
output:
272
悬赏关注,救救孩子吧!