记录编号 574947 评测结果 AAAAAAAAAA
题目名称 [USACO Mar12] 拖拉机 最终得分 100
用户昵称 Gravatarlihaoze 是否通过 通过
代码语言 C++ 运行时间 0.082 s
提交时间 2022-08-30 02:14:34 内存使用 6.60 MiB
显示代码纯文本
#include <bits/stdc++.h>
 
struct P { int x, y, cnt; };
 
const int N = 50010, M = 1010;
P a[N];
bool g[M][M], st[M][M];
int n, ans = 1e9, mx, my;
int dx[] = { 1, -1, 0, 0 };
int dy[] = { 0, 0, -1, 1 };
 
bool valid(int x, int y) {
    return x >= 1 && x <= mx && y >= 1 && y <= my;
}
 
void bfs() {
    std::queue<P> q;
    q.push(a[0]);
    while (q.size()) {
        P now = q.front(); q.pop();
        for (int i = 0; i < 4; ++ i) {
            int x = now.x + dx[i],
                y = now.y + dy[i],
                cnt = now.cnt;
            if (!valid(x, y))
                ans = std::min(ans, cnt);
            else if (g[x][y] && !st[x][y] && cnt + 1 < ans)
                q.push((P){x, y, cnt + 1}),
                st[x][y] = true;
            else if (!g[x][y] && !st[x][y] && cnt < ans)
                q.push((P){x, y, cnt}),
                st[x][y] = true;
        }
    }
}
 
int main() {
    freopen("tractor.in", "r", stdin);
    freopen("tractor.out", "w", stdout);
    std::cin >> n >> a[0].x >> a[0].y, a[0].cnt = 0;
    for (int i = 1; i <= n; ++ i) {
        int x, y; std::cin >> x >> y;
        mx = std::max(mx, x);
        my = std::max(my, y);
        g[x][y] = true;
    }
    bfs();
    std::cout << ans << '\n';
    return 0;
}