81pts,好像是某一个数据map会失灵?
查看原帖
81pts,好像是某一个数据map会失灵?
463956
incra楼主2022/11/12 18:14
#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;
}

一下数据mapmap会失灵???

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

悬赏关注,救救孩子吧!

2022/11/12 18:14
加载中...