本地运行没错误,但提交上去10分
查看原帖
本地运行没错误,但提交上去10分
383782
StarPatrick楼主2021/6/18 14:00
#include <iostream>
#include <queue>
#include <cstring>
#include <cstdio>
using namespace std;
int w, h, dir[4][2] = { { 0, 1 }, { 1, 0 }, { 0, -1 }, { -1, 0 } }, book[205][80], ans[205][80];
char a[205][80];
struct e {
    int x, y, u;
} t1, t2;
void bfs(int sx, int sy) {
    queue<e> q;
    t1.x = sx;
    t1.y = sy;
    book[sx][sy] = 1;
    t1.u = 0;
    q.push(t1);
    while (!q.empty()) {
        t1 = q.front();
        int u1 = t1.x, u2 = t1.y;
        if (ans[u1][u2] == -1) {
            ans[u1][u2] = t1.u;
        } else {
            ans[u1][u2] = min(t1.u, ans[u1][u2]);
        }
        q.pop();
        for (int p = 0; p < 4; p++) {
            int dx1 = t1.x + dir[p][0], dy1 = t1.y + dir[p][1], dx2 = t1.x + dir[p][0] * 2,
                dy2 = t1.y + dir[p][1] * 2;
            if (dx2 >= 1 && dx2 <= h && dy2 >= 1 && dy2 <= w && a[dx1][dy1] == ' ' && book[dx2][dy2] == 0) {
                book[dx2][dy2] = 1;
                t2.x = dx2;
                t2.y = dy2;
                t2.u = t1.u + 1;
                q.push(t2);
            }
        }
    }
    return;
}
int main() {
    int flag1 = 0, flag2 = 0, lx1, ly1, lx2, ly2;
    scanf("%d %d", &w, &h);
    w = w * 2 + 1;
    h = h * 2 + 1;
    for (int p = 1; p <= h; p++) {
        char i = getchar();
        for (int k = 1; k <= w; k++) {
            a[p][k] = getchar();
        }
    }
    for (int p = 1; p <= h; p++) {
        if (a[p][1] == ' ' && flag1 == 0) {
            lx1 = p;
            ly1 = 2;
            a[p][1] = '|';
            flag1 = 1;
        } else if (a[p][1] == ' ' && flag2 == 0) {
            lx2 = p;
            ly2 = 2;
            a[p][1] = '|';
            flag2 = 1;
        }
    }
    for (int p = 1; p <= h; p++) {
        if (a[p][w] == ' ' && flag1 == 0) {
            lx1 = p;
            ly1 = w - 1;
            a[p][w] = '|';
            flag1 = 1;
        } else if (a[p][w] == ' ' && flag2 == 0) {
            lx2 = p;
            ly2 = w - 1;
            a[p][w] = '|';
            flag2 = 1;
        }
    }
    for (int p = 1; p <= w; p++) {
        if (a[1][p] == ' ' && flag1 == 0) {
            lx1 = 2;
            ly1 = p;
            a[1][p] = '-';
            flag1 = 1;
        } else if (a[1][p] == ' ' && flag2 == 0) {
            lx2 = 2;
            ly2 = p;
            a[1][p] = '-';
            flag2 = 1;
        }
    }
    for (int p = 1; p <= w; p++) {
        if (a[h][p] == ' ' && flag1 == 0) {
            lx1 = h - 1;
            ly1 = p;
            a[h][p] = '-';
            flag1 = 1;
        } else if (a[h][p] == ' ' && flag2 == 0) {
            lx2 = h - 1;
            ly2 = p;
            a[h][p] = '-';
            flag2 = 1;
        }
    }
    memset(ans, -1, sizeof(ans));
    bfs(lx1, ly1);
    memset(book, 0, sizeof(book));
    bfs(lx2, ly2);
    int MAX = 0;
    for (int p = 2; p < h; p += 2) {
        for (int k = 2; k < w; k += 2) {
            MAX = max(MAX, ans[p][k]);
        }
    }
    cout << MAX + 1;
    return 0;
}
2021/6/18 14:00
加载中...