• hdu 1983(bfs+dfs)


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1983

    思路:算得上是暴力解放了。。。orz...由于最多封锁4个区域,因此直接dfs枚举,bfs暴搜即可!!!跑了将近4000ms啊...

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<queue>
     5 using namespace std;
     6 #define MAXN 10
     7 struct Node{
     8     int x,y,time;
     9     int key;
    10 };
    11 char map[MAXN][MAXN];
    12 bool mark[MAXN][MAXN][2];
    13 int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
    14 int n,m,t;
    15 Node st,ed;
    16 
    17 bool bfs(){
    18     memset(mark,false,sizeof(mark));
    19     queue<Node>Q;
    20     Node p,q;
    21     mark[st.x][st.y][st.key]=true;
    22     Q.push(st);
    23     while(!Q.empty()){
    24         p=Q.front();
    25         Q.pop();
    26         if(p.time>t)continue;
    27         if(map[p.x][p.y]=='E'&&p.key==1){
    28             return false;
    29         }
    30         for(int i=0;i<4;i++){
    31             q.x=p.x+dir[i][0];
    32             q.y=p.y+dir[i][1];
    33             q.key=p.key;
    34             q.time=p.time;
    35             if(q.x<1||q.x>n||q.y<1||q.y>m)continue;
    36             if(map[q.x][q.y]=='#')continue;
    37             if(map[q.x][q.y]=='J')q.key=1;
    38             if(!mark[q.x][q.y][q.key]){
    39                 q.time+=1;
    40                 mark[q.x][q.y][q.key]=true;
    41                 Q.push(q);
    42             }
    43         }
    44     }
    45     return true;
    46 }
    47 
    48 bool dfs(int total){
    49     if(!total)return bfs();
    50     for(int i=1;i<=n;i++){
    51         for(int j=1;j<=m;j++){
    52             if(map[i][j]=='.'||map[i][j]=='J'){
    53                 char ch=map[i][j];
    54                 map[i][j]='#';
    55                 if(dfs(total-1))return true;
    56                 map[i][j]=ch;
    57             }
    58         }
    59     }
    60     return false;
    61 }
    62 
    63 
    64 int main(){
    65     int _case;
    66     scanf("%d",&_case);
    67     while(_case--){
    68         scanf("%d%d%d",&n,&m,&t);
    69         for(int i=1;i<=n;i++){
    70             scanf("%s",map[i]+1);
    71             for(int j=1;j<=m;j++){
    72                 if(map[i][j]=='S'){ st.x=i,st.y=j,st.time=0,st.key=0; }
    73             }
    74         }
    75         if(dfs(0)){ puts("0"); }
    76         else if(dfs(1)){ puts("1"); }
    77         else if(dfs(2)){ puts("2"); }
    78         else if(dfs(3)){ puts("3"); }
    79         else puts("4");
    80     }
    81     return 0;
    82 }
    View Code
  • 相关阅读:
    Windows Server 2008 R2 服务器系统安装及配置全过程图文详解
    c#多线程
    DevExpress之TreeList控件用作导航使用说明
    Windows操作系统下搭建Git服务器和客户端。
    D^3CTF 2021 8-bit-pub
    shiro-1.2.4反序列化分析踩坑
    *CTF2021 oh-my-bet
    无线网络密码破解初体验
    瑞昱rtl819x-SDK-v3.4.14b的watchdog分析
    RC4加密算法
  • 原文地址:https://www.cnblogs.com/wally/p/3084703.html
Copyright © 2020-2023  润新知