zoukankan      html  css  js  c++  java
  • hdu_1072_Nightmare(BFS)

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

    题意:给你一个地图,让你在炸弹爆之前找到出口,最初炸弹设定为6,每走一格需要1,中途有地方能让炸弹的时间重置为6,找到出口的最短时间。

    题解:直接上BFS,需要注意的是要另开一个数组来存当前位置的炸弹最大时间,如果走回来时炸弹比原来的时间小,就不走。


     1 #include<cstdio>
     2 #include<queue>
     3 using namespace std;
     4 int g[10][10],v[10][10],m,n,sx,sy,dir[][2]={1,0,-1,0,0,1,0,-1};
     5 #define FFC(i,a,b) for(int i=a;i<=b;i++)
     6 bool check(int x,int y){if(g[x][y]==0||x>n||x<1||y>m||y<1)return 0;return 1;}
     7 struct node{int x,y,c,t;};
     8 int fuck(){
     9     node s,now;s.x=sx,s.y=sy,s.c=0,s.t=6,v[sx][sy]=1;
    10     queue<node>Q;Q.push(s);
    11     while(!Q.empty()){
    12         now=Q.front();Q.pop();
    13         if(!now.t)continue;
    14         if(g[now.x][now.y]==3)return now.c;
    15         if(g[now.x][now.y]==4)now.t=6;
    16         v[now.x][now.y]=now.t;
    17         FFC(i,0,3){
    18             int xx=now.x+dir[i][0],yy=now.y+dir[i][1];
    19             if(check(xx,yy)&&now.t-1>v[xx][yy]){
    20                 s.x=xx,s.y=yy,s.c=now.c+1,s.t=now.t-1;
    21                 Q.push(s);
    22             }
    23         }
    24     }
    25     return -1;
    26 }
    27 int main(){
    28     int t,tmp;
    29     scanf("%d",&t);
    30     while(t--){
    31         scanf("%d%d",&n,&m);
    32         FFC(i,1,n)FFC(j,1,m){
    33             scanf("%d",&g[i][j]);
    34             v[i][j]=0;
    35             if(g[i][j]==2)sx=i,sy=j;
    36         }
    37         printf("%d
    ",fuck());
    38     }
    39     return 0;
    40 }
    View Code
  • 相关阅读:
    ubuntu播放器
    第一次装ubuntu 没root密码时
    web服务器记录
    socket udp编程步骤
    nfs服务器配置
    带线程函数编译条件
    linux使用一个刚编译驱动方法
    tiny6410_led驱动Makefile
    java-设计模式-外观模式
    java-实现一个简单的java Web容器
  • 原文地址:https://www.cnblogs.com/bin-gege/p/5696171.html
Copyright © 2011-2022 走看看