求解
2026-04-13 16:26:22
发布于:浙江
题目描述
伏地魔偷偷潜入哈利的宿舍中,准备在哈利放下戒心的时候杀哈利,哈利被吓了一跳,他发现了伏地魔,便翻出窗外跑了,伏地魔发现哈利跑了,便追了上去,地图有n*n大,哈利逃跑速度与伏地魔速度均为1格/s,伏地魔初始在哈利后面一格,并且会自动选择最优路线,哈利的目标为跑到邓布利多办公室处处,每次仅能向上,下,左,右四个方向逃跑,不能斜着逃跑,若无法跑到办公室处,则输出“被杀了”,否则输出逃跑总用时。
S代表通路,X代表死路,Q代表办公室,E代表起点,保证无多余字符
输入格式
第一行为地图边长n,
从第2行开始共n行,每行n个字符。
输出格式
输出一行,输出“被杀了”或总用时
全部评论 6



2026-04-15 来自 浙江
0看拒接拒接拒接拒接拒接拒接拒接
2026-04-13 来自 浙江
0加入阿瓦达索命和除你武器,更好
2026-04-13 来自 浙江
0给你个思路:
1.先遍历地图,找到起点 E(哈利初始位置)和办公室 Q(终点)2.伏地魔初始在哈利正后方一格,两人速度相同(1 格 / 秒)
3.哈利只能走上下左右通路 S,不能走死路 X
4.BFS 搜索哈利到终点的最短时间
5.伏地魔走最优路线,只要哈利到达终点的时间 ≤ 伏地魔到达终点的时间,哈利就能成功逃跑;否则被杀
2026-04-13 来自 广东
0广度优先搜索(BFS)
2026-04-13 来自 广东
0#include <bits/stdc++.h> using namespace std; const int MAX = 105; char mp[MAX][MAX]; int vis[MAX][MAX]; int dx[] = {-1, 1, 0, 0}; int dy[] = {0, 0, -1, 1}; int n; int ex, ey; int qx, qy; int vx, vy; int bfs(int sx, int sy, int tx, int ty) { memset(vis, 0, sizeof(vis)); queue<pair<pair<int, int>, int>> q; q.push({{sx, sy}, 0}); vis[sx][sy] = 1; while (!q.empty()) { auto now = q.front(); q.pop(); int x = now.first.first; int y = now.first.second; int t = now.second; if (x == tx && y == ty) { return t; } for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx >= 0 && nx < n && ny >= 0 && ny < n && !vis[nx][ny] && mp[nx][ny] != 'X') { vis[nx][ny] = 1; q.push({{nx, ny}, t + 1}); } } } return -1; } int main() { cin >> n; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> mp[i][j]; if (mp[i][j] == 'E') { ex = i; ey = j; } if (mp[i][j] == 'Q') { qx = i; qy = j; } } } vx = ex + 1; vy = ey; int pro = bfs(ex, ey, qx, qy); int killer = bfs(vx, vy, qx, qy); if (pro == -1) { cout << "被杀了" << endl; } else { if (pro <= killer) { cout << pro << endl; } else { cout << "被杀了" << endl; } } }2026-04-13 来自 广东
0大佬,受小弟一拜
2026-04-15 来自 浙江
0哦哦哦,我还在上课
2026-04-15 来自 广东
0



























有帮助,赞一个