CF D. Labyrinth 01BFS

Code: 

#include<bits/stdc++.h>
#define maxn 2003 
using namespace std;  
void setIO(string s) {
    string in=s+".in"; 
    freopen(in.c_str(),"r",stdin);          
}  
int dx[]={0,1,0,-1}; 
int dy[]={1,0,-1,0};   
struct Node { 
    int x,y; 
    Node(int y=0,int x=0):x(x),y(y){} 
};          
deque<Node>Q;      
int n,m,r,c,X,Y;
int G[maxn][maxn],vis[maxn][maxn],L[maxn][maxn],R[maxn][maxn];        
char str[maxn];  
int main() {
    int cc=1; 
    // setIO("input"); 
    scanf("%d%d%d%d%d%d",&n,&m,&r,&c,&X,&Y);     
    for(int i=1;i<=n;++i) {
        scanf("%s",str+1); 
        for(int j=1;j<=m;++j) G[i][j]=!(str[j]=='.'); 
    }         
    vis[r][c]=1;        
    Q.push_back(Node(r, c));   
    while(!Q.empty()) {
        Node u=Q.front(); Q.pop_front(); 
        for(int i=0;i<4;++i) {    
            int x=u.x+dx[i],y=u.y+dy[i];  
            if(x<1||x>m||y<1||y>n||vis[y][x]||G[y][x]) continue;                         
            vis[y][x]=1;        
            L[y][x]=L[u.y][u.x]; 
            R[y][x]=R[u.y][u.x];                      
            if(x<u.x) {
                if(L[u.y][u.x] + 1 > X) continue;         
                else {   
                    L[y][x]=L[u.y][u.x]+1;  
                    Q.push_back(Node(y, x));      
                    ++cc;  
                    continue; 
                }
            }  
            if(x>u.x) {            
                if(R[u.y][u.x] + 1 > Y) continue;   
                else {
                    R[y][x]=R[u.y][u.x]+1;    
                    Q.push_back(Node(y,x));    
                    ++cc; 
                    continue;   
                }
            } 
            Q.push_front(Node(y,x));      
            ++cc;   
        }
    } 
    printf("%d\n",cc);  
    return 0;      
}

  

转载于:https://www.cnblogs.com/guangheli/p/11263556.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值