zoukankan      html  css  js  c++  java
  • cf1063B Labyrinth (bfs)

    可以证明,如果我搜索的话,一个点最多只有两个最优状态:向左剩余步数最大时和向右剩余步数最大时

    然后判一判,bfs就好了

    dfs会T惨...

     1 #include<bits/stdc++.h>
     2 #define pa pair<int,int>
     3 #define CLR(a,x) memset(a,x,sizeof(a))
     4 using namespace std;
     5 typedef long long ll;
     6 const int maxn=2000+10;
     7 
     8 inline ll rd(){
     9     ll x=0;char c=getchar();int neg=1;
    10     while(c<'0'||c>'9'){if(c=='-') neg=-1;c=getchar();}
    11     while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
    12     return x*neg;
    13 }
    14 
    15 struct Node{
    16     int x,y,l,r;
    17     Node(int a=0,int b=0,int c=0,int d=0){
    18         x=a,y=b,l=c,r=d;
    19     }
    20 };
    21 bool mp[maxn][maxn],vis[maxn][maxn];
    22 int N,M,X,Y,L,R;
    23 int ml[maxn][maxn][2],mr[maxn][maxn][2],ans;
    24 char s[maxn];
    25 queue<Node> q;
    26 
    27 void bfs(){
    28     q.push(Node(X,Y,L,R));
    29     while(!q.empty()){
    30         Node p=q.front();q.pop();
    31         int l=p.l,r=p.r,x=p.x,y=p.y;
    32         if(l<0||r<0) continue;
    33         if(x<=0||y<=0||x>N||y>M) continue;
    34         if(!mp[x][y]) continue;
    35         if((l<ml[x][y][0]||(l==ml[x][y][0]&&r<=ml[x][y][1]))&&(r<mr[x][y][1]||(r==mr[x][y][1]&&l<=mr[x][y][0]))) continue;
    36         if(!vis[x][y]) vis[x][y]=1,ans++;
    37         if(l>=ml[x][y][0]) ml[x][y][0]=l,ml[x][y][1]=r;
    38         if(r>=mr[x][y][1]) mr[x][y][0]=l,mr[x][y][1]=r;
    39         q.push(Node(x,y+1,l,r-1));q.push(Node(x,y-1,l-1,r));
    40         q.push(Node(x+1,y,l,r));q.push(Node(x-1,y,l,r));
    41     }
    42 }
    43 
    44 int main(){
    45     //freopen(".in","r",stdin);
    46     int i,j,k;
    47     N=rd(),M=rd();
    48     X=rd(),Y=rd();
    49     L=rd(),R=rd();
    50     CLR(ml,-1);CLR(mr,-1);
    51     for(i=1;i<=N;i++){
    52         scanf("%s",s+1);
    53         for(j=1;j<=M;j++){
    54             mp[i][j]=(s[j]=='.');
    55         }
    56     }
    57     bfs();
    58     printf("%d
    ",ans);
    59     return 0;
    60 }
  • 相关阅读:
    IIS 7.0 下 httpMoudle 失效的问题
    iis 管理员执行 aspnet_iis.exe
    java script 闭包
    c# 多语言实现 与 InitializeCulture
    谈 IIS7.5 Asp.Net模拟用户
    oledb 写入 office2010 以及发布到iis 遇到的奇怪问题总结
    DataTableToExcel
    下拉加载数据
    简单使用TFS管理源代码
    a span做成按钮样式不选中文字
  • 原文地址:https://www.cnblogs.com/Ressed/p/9794616.html
Copyright © 2011-2022 走看看