社区讨论

bfs test8 WA,求调

CF1063BLabyrinth参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo1g922v
此快照首次捕获于
2023/10/22 20:33
2 年前
此快照最后确认于
2023/11/02 20:57
2 年前
查看原帖
Test8 data
CPP
2000 2000
1 2
1000000000 1000000000
*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*.....*......
CPP
#include <bits/stdc++.h>
using namespace std;
const int N = 2010;
typedef long long lg;
struct POINT{
    int x,y;lg ll,rr;
}que[N * 4];
int n,m,r,c,x,y,cnt = 0;
char ditu[N][N];int vis[N][N];
int dir[4][2] = {{-1,0},{1,0},{0,-1},{0,1}};

void bfs() {
    int head = 0,tail = 1;
    que[1] = {r,c,0,0};
    vis[r][c] = 1;
    int flag;
    while(head < tail) {    
        head++;
        for(int i = 0;i < 4;i++) {
            flag = 0;
            int nx = que[head].x + dir[i][0],ny = que[head].y + dir[i][1];
            if(nx < 1 || ny < 1 || nx > n || ny > m || vis[nx][ny] || ditu[nx][ny] == '*') continue;

            if(i == 2) {
                if(que[head].ll >= x) continue;
                else flag = 2;
            }

            if(i == 3) {
                if(que[head].rr >= y) continue;
                else flag = 3;
            }

            tail++;
            vis[nx][ny] = 1;
            if(flag == 2) que[tail] = {nx,ny,que[head].ll + 1,que[head].rr};   
            else if(flag == 3) que[tail] = {nx,ny,que[head].ll,que[head].rr + 1};   
            else {
                que[tail] = {nx,ny,que[head].ll,que[head].rr};   
            }
        
        }
    }
}


int main(){
    cin >> n >> m >> r >> c >> x >> y;
    for(int i = 1;i <= n;i++) {
        for(int j = 1;j <= m;j++) {
            cin >> ditu[i][j];
        }
    }

    bfs();
    

    for(int i = 1;i <= n;i++) {
        for(int j = 1;j <= m;j++) {
            if(vis[i][j]) cnt++;
        }
    }

    cout << cnt << endl;
    return 0;
}


回复

0 条回复,欢迎继续交流。

正在加载回复...