看不出来错在哪 求助dalao
  • 板块P1902 刺杀大使
  • 楼主Gent7c
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/8 18:41
  • 上次更新2024/3/8 21:15:37
查看原帖
看不出来错在哪 求助dalao
1172582
Gent7c楼主2024/3/8 18:41
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
int n, m;
int a[1005][1005];
bool used[1005][1005];
int dx[5] = { 0,1,-1,0,0 };
int dy[5] = { 0,0,0,1,-1 };
int r=0, l=0;
int mid, ans, xx, yy;
bool bfs(int x, int y, int mid)
{
	queue<pair<int, int>>q;
    q.push(make_pair(x,y)); used[x][y] = true;
        while (!q.empty())
        {
            q.pop(); xx = q.front().first; yy = q.front().second;
            for (int i = 0; i < 5; i++)
            {
                int nx = xx + dx[i];
                int ny = yy + dy[i];
                if (nx < 0 || nx > n-1 || yy < 0 || yy > m-1 || used[nx][ny] || a[nx][ny] > mid)
                    continue;
                used[nx][ny] = true;
                if (nx == n-1) return true;
                else q.push(make_pair(nx, ny));
            }
        }
    return false;
}
int main()
{
    cin >> n >> m;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
        {
            cin >> a[i][j];
            l = min(l, a[i][j]);
            r = max(r, a[i][j]);
        }
    while (l <= r)
    {
        mid = (l + r) >> 1;
        memset(used, false, sizeof(used));
        if (bfs(0, 0, mid)) r = mid - 1, ans = r;
        else l = mid + 1;
    }
    cout << ans;
}
2024/3/8 18:41
加载中...