码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 3669 Meteor Shower(BFS)

时间:2016-03-24 16:10:39      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

坑点: 

  1.数组开大点,0-300是流星下落范围

  2.maps[tx][ty] = min(maps[tx][ty],t); 流星两次下落同一地方取时间小的

 

思路:将maps[][] 图上的值作为该点不能走的时间(根据流星下落时间判断5个方向)

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<queue>
 4 #include<iostream>
 5 using namespace std;
 6 
 7 int maps[400][400];
 8 int dx[] = {-1,0,0,0,1};
 9 int dy[] = {0,-1,0,1,0};
10 bool vis[400][400];
11 struct Node{
12     int x,y,step;
13     Node(int x,int y,int step):x(x),y(y),step(step){}
14 };
15 queue<Node> que;
16 bool ok(int x,int y,int step){
17     if(!(x>=0 && y>=0 && x<= 400 & y <= 400))    return false;
18     if(vis[x][y])    return false;
19     if(step >= maps[x][y])    return false;
20     return true;
21 }
22 
23 bool bfs(){
24     que.push(Node(0,0,0));
25     vis[0][0] = true;
26     while(!que.empty()){
27         Node tmp = que.front(); que.pop(); 
28         int x = tmp.x , y = tmp.y , step = tmp.step;
29         if(maps[x][y] == 0x7f7f7f7f){
30             printf("%d\n",step);
31             return true;
32         }
33         for(int i = 0 ; i < 5 ; i ++){
34             int newx = x + dx[i];
35             int newy = y + dy[i];
36             if(ok(newx,newy,step+1)){
37                 vis[newx][newy] = true;
38                 que.push(Node(newx,newy,step+1));
39             }
40         }        
41     }    
42     return false;    
43 }
44 
45 int main(){    
46     int n;
47     while(scanf("%d",&n)!= EOF && n){
48         while(!que.empty()) que.pop();
49         memset(vis,false,sizeof(vis));
50         memset(maps,0x7f7f7f7f,sizeof(maps));
51         for(int i = 0 ; i < n ; i ++){
52             int x,y,t;
53             scanf("%d%d%d",&x,&y,&t);
54             for(int i = 0 ; i < 5 ; i ++){
55                 int tx = x + dx[i];
56                 int ty = y + dy[i];
57                 if(tx>=0 && ty>=0 && tx<= 400 & ty <= 400)
58                     maps[tx][ty] = min(maps[tx][ty],t);
59             }
60         }
61         if(maps[0][0] == 0) printf("-1\n");
62         else if(!bfs()) printf("-1\n");
63     }
64     
65     return 0;
66 }

 

POJ 3669 Meteor Shower(BFS)

标签:

原文地址:http://www.cnblogs.com/zstu-jack/p/5315807.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!