求助 开了O2 90分 测试点8TLE
查看原帖
求助 开了O2 90分 测试点8TLE
851250
Washington2022楼主2023/6/9 17:46

不开O2 70分 测试点4、8、9TLE

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;

int visited[405][405];

int m, n, x, y;

int dx[] = {-2, -2, 2, 2, -1, -1, 1, 1};
int dy[] = {1, -1, 1, -1, 2, -2, 2, -2};

int bfs(int fr, int fc)
{
    memset(visited, 0, sizeof(visited));
    int row, col, r, c, qsize, step = 0;
    queue<int> qrow, qcol;
    qrow.push(x);
    qcol.push(y);
    visited[x][y] = 1;
    while (!qrow.empty())
    {
        ++step;
        qsize = qrow.size();
        while (qsize--)
        {
            row = qrow.front();
            col = qcol.front();
            qrow.pop();
            qcol.pop();
            for (int i = 0; i < 8; ++i)
            {
                r = row + dx[i];
                c = col + dy[i];
                if (r < 1 || c < 1 || r > n || c > m) continue;
                if (visited[r][c]) continue;
                if (r == fr && c == fc)
                {
                    return step;
                }
                qrow.push(r);
                qcol.push(c);
                visited[r][c] = 1;
            }
        }
    }
    return -1;
}

int main()
{
    cin >> n >> m >> x >> y;
    for (int i = 1; i <= n; ++i)
    {
        for (int j = 1; j <= m; ++j)
        {
            if (i == x && j == y)
                cout << 0 << ' ';
            else
                cout << bfs(i, j) << ' ';
        }
        cout << endl;
    }
    return 0;
}

2023/6/9 17:46
加载中...