求助,66分
查看原帖
求助,66分
672757
封禁用户楼主2024/7/7 15:21
#include <bits/stdc++.h>
using namespace std;

int n, m;
int jia[5][3] = {{0, 0, 0}, {0, 1, 0}, {0, 0, 1}, {0, -1, 0}, {0, 0, -1}};
struct wz {
    int a, b;
    int s;
} c, q;
string nn[305];
int m2[305][305] = {};

void fd(wz &wy) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (nn[i][j] == nn[wy.a][wy.b] && (i != wy.a || j != wy.b)) {
                wy.a = i;
                wy.b = j;
                return; 
            }
        }
    }
}

void dd() {
    queue<wz> mm;
    mm.push(q);
    wz ne, wy;
    while (!mm.empty()) {
        wy = mm.front();
        mm.pop();
        if (nn[wy.a][wy.b] == '=') {
            cout << wy.s;
            return;
        }
        if (nn[wy.a][wy.b] >= 'A' && nn[wy.a][wy.b] <= 'Z') {
            fd(wy);
        }
        m2[wy.a][wy.b] = 1;
        for (int i = 1; i <= 4; i++) {
            int x = wy.a + jia[i][1];
            int y = wy.b + jia[i][2];
            if (!m2[x][y] && x >= 0 && x < n && y >= 0 && y < m && nn[x][y] != '#') {
                ne.a = x;
                ne.b = y;
                ne.s = wy.s + 1;
                mm.push(ne);
                m2[x][y] = 1; 
            }
        }
    }
    cout << -1;
}

int main() {
    cin >> n >> m;
    c.a = c.b = q.a = q.b = -1;
    c.s = q.s = 0;
    for (int i = 0; i < n; i++) {
        cin >> nn[i];
        if (c.a < 0 && nn[i].find("=") != string::npos) {
            c.a = i;
            c.b = nn[i].find("=");
        }
        if (q.a < 0 && nn[i].find("@") != string::npos) {
            q.a = i;
            q.b = nn[i].find("@");
        }
    }
    dd();
    return 0;
}

2024/7/7 15:21
加载中...