第四十个点WA求调
查看原帖
第四十个点WA求调
988735
THE_DARK_FOREST楼主2023/7/25 14:22
#include <iostream>
#include <queue>
using namespace std;
char _map[2005][2005];
bool vis[2005][2005];
int ans = 1;
int n, m, r, c, x, y;
struct point {
    int x, y, maxX, maxY;
};
void bfs()
{
    queue<point> q;
    q.push({r, c, x, y});
    vis[r][c] = 1;
    while (q.size())
    {
        point data  = q.front();
        q.pop();
        int nex[2][2] = {{1,0},{-1,0}};
        for (int i = 0; i < 2; i++)
        {
            int dx = nex[i][0] + data.x;
            int dy = nex[i][1] + data.y;
            if (dx <= 0 || dx > n || dy <= 0 || dy > m || vis[dx][dy])
            {
                continue;
            }
            vis[dx][dy] = 1;
            ans++;
            q.push({dx, dy, data.maxX, data.maxY});
        }
        if (data.maxX > 0)
        {
            int dx = data.x;
            int dy = data.y - 1;
            if (dy <= 0 || dy > m || vis[dx][dy])
            {
                goto _;
            }
            vis[dx][dy] = 1;
            ans++;
            q.push({dx, dy, data.maxX - 1, data.maxY});
        }
        _:
            if (data.maxY > 0)
            {
                int dx = data.x;
                int dy = data.y + 1;
                if (dy <= 0 || dy > m || vis[dx][dy])
                {
                    continue;
                }
                vis[dx][dy] = 1;
                ans++;
                q.push({dx, dy, data.maxX, data.maxY - 1});
            }
    }
}
void solve()
{
    cin >> n >> m >> r >> c >> x >> y;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            cin >> _map[i][j];
            vis[i][j] = (_map[i][j] == '*');
        }
    }
    bfs();
    cout << ans;
}
int main()
{
    solve();
}
2023/7/25 14:22
加载中...