题目传送门
#include <bits/stdc++.h>
using namespace std;
int n, m;
const int N = 310;
char a[N][N];
int x, y;
int st[N][N];
struct node {
int x, y, step;
};
queue<node> q;
int dx[] = {0, 0, -1, 1};
int dy[] = {-1, 1, 0, 0};
void getDui(int x, int y, int &x1, int &y1) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++)
if (!(i == x && j == y) && a[i][j] == a[x][y]) x1 = i, y1 = j;
}
}
void bfs() {
st[x][y] = 1;
q.push({x, y, 0});
while (!q.empty()) {
node p = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int x1 = p.x + dx[i], y1 = p.y + dy[i];
if (a[x1][y1] == '=') {
cout << p.step + 1 << endl;
return;
}
if (a[x1][y1] >= 'A' && a[x1][y1] <= 'Z') {
getDui(x1, y1, x, y);
x1 = x, y1 = y;
}
if (x1 >= 1 && y1 >= 1 && a[x1][y1] != '#' && !st[x1][y1]) {
q.push({x1, y1, p.step + 1});
st[x1][y1] = 1;
}
}
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
if (a[i][j] == '@') x = i, y = j;
}
bfs();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!