题解:B4214 [常州市赛 2022] 迷宫探险

· · 题解

题目简述

题意

给定一张 N \times N 的地图,地图只包含如下字符。

求玩家最高得到了几分以及所有玩家得到的总分。

思路 1

流程如下。

void bfs(int x, int y) { //广搜 memset(vis, 0, sizeof(vis)); q.push({x, y}), vis[x][y] = true; while (!q.empty()) { int ux = q.front().x, uy = q.front().y, ur = q.front().r; q.pop(); if (maps[ux][uy] == '@' && ur <= dis[x][y]) { dis[x][y] = ur, number[x][y]++, score[ux][uy]++, maxx = max(maxx, score[ux][uy]);//可以得到分数 continue; } for (int i = 0; i < 4; i++) { int tx = dx[i] + ux, ty = uy + dy[i]; if (tx >= 0 && ty >= 0 && tx < n && ty < n && maps[tx][ty] != '#' && !vis[tx][ty]) q.push({tx, ty, ur + 1}), vis[tx][ty] = true; } } ans += number[x][y]; } int main() { memset(dis, 0x3f, sizeof(dis)); //初始化 in >> n; for (int i = 0; i < n; i++) //输入地图 for (int j = 0; j < n; j++) in >> maps[i][j]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) if (maps[i][j] == '$') bfs(i, j); //对该点进行广搜 out << maxx << '\n' << ans; //输出答案 return 0; }