hdoj1072 Nightmare(bfs)

题目大意:

在迷宫中有一个炸弹,过六个单位时间就会爆炸,要你求一个起点到迷宫的终点的最短距离,迷宫中有时间重置器,当你走到这个格子,炸弹的爆炸时间重新置为0,迷宫中标识为墙壁的格子不能走,到达任意一个格子时,炸弹计数器为0时,则失败。

求逃出迷宫最短距离,bfs。

但是有两个限制条件,1.求最短,2.炸弹时间不小于1(等于零不OK)。

解锁bfs新姿势。(赞!

 1 #include<iostream>
 2 #include<cstring>
 3 #include<queue>
 4 #define maxn 10
 5 using namespace std;
 6 const int dx[]={-1,1,0,0},dy[]={0,0,-1,1};
 7 int map[maxn][maxn],V[maxn][maxn];
 8 struct point{
 9     int x,y;
10     int temp,time; // 步数,剩余时间 
11 }start;
12 int ans,n,m;
13 int bfs(){
14     queue<point> Q;
15     Q.push(start);
16     while (!Q.empty()){
17         point pre=Q.front();
18         if (map[pre.x][pre.y]==3 && pre.time>0){
19             ans=pre.temp;
20             return 1;
21         }
22         Q.pop();
23         for (int i=0;i<4;i++){
24             point next;
25             next.x=pre.x+dx[i];
26             next.y=pre.y+dy[i];
27             next.temp=pre.temp+1;
28             next.time=pre.time-1;
29             if (next.x<0 || next.x>=n || next.y<0 || next.y>=m || next.time<=0 || map[next.x][next.y]==0) continue;
30             if (map[next.x][next.y]==3){
31                 ans=next.temp;
32                 return 1;
33             }
34             else if (map[next.x][next.y]==4){
35                 next.time=6;
36                 map[next.x][next.y]=0;
37             }
38             Q.push(next);
39         }
40     }
41     return 0;
42 }
43 int main(){
44     int t;
45     cin >> t;
46     while (t--){
47         cin >> n >> m;
48         for (int i=0;i<n;i++){
49             for (int j=0;j<m;j++){
50                 cin >> map[i][j];
51                 if (map[i][j]==2){
52                     start.x=i;
53                     start.y=j;
54                     start.temp=0;
55                     start.time=6;
56                 }
57             }
58         }
59         memset(V,0,sizeof(V));
60         ans=0;
61         if (bfs()) cout << ans << endl;
62         else cout << -1 << endl;
63     }
64     return 0;
65 }

 

posted @ 2018-02-28 23:28  Changer-qyz  阅读(223)  评论(0编辑  收藏  举报