• 注册
当前位置:1313e > 默认分类 >正文

POJ 3669

题意:已知流星的颗数,落地的坐标和落地时间,若流星落在某点则该点周围的四点也会被波及,现在要求你到达一点没有被流星击过的点最少时间

注意:只能在第一象限内包括X,Y轴的正半轴

 

 1 #include 
 2 #include 
 3 #include 
 4 #include 
 5 #include 
 6 #include 
 7 #include <string>
 8 #include 
 9 #include 
10 #include <set>
11 #include 
12 #include 
13 #include 
14 #include 
15 using namespace std;
16 typedef long long ll;
17 typedef pair<int,int> P;
18 #define PI acos( -1.0 )
19 const double E = 1e-8;
20 const int INF = 0x7fffffff;
21 
22 const int NO = 300 + 5;
23 int m[NO][NO];
24 int step[NO][NO];
25 int mark[NO][NO];
26 int dir[][2] = { {-1,0}, {1,0}, {0,-1}, {0,1} };
27 int n;
28 
29 void init()
30 {
31     for( int i = 0; i < NO; ++i )
32         for( int j = 0; j < NO; ++j )
33             m[i][j] = INF;
34 }
35 
36 void init1( int x, int y, int c )
37 {
38     for( int i = 0; i < 4; ++i )
39     {
40         int xx = x + dir[i][0];
41         int yy = y + dir[i][1];
42         if( xx >= 0 && yy >= 0 )
43             m[xx][yy] = min( m[xx][yy], c );
44     }
45 }
46 
47 void bfs()
48 {
49     queue 

q; 50 q.push( P( 0, 0 ) ); 51 mark[0][0] = 0; 52 memset( step, 0, sizeof( step ) ); 53 while( !q.empty() ) 54 { 55 P t = q.front(); q.pop(); 56 int x = t.first; 57 int y = t.second; 58 mark[x][y] = 0; 59 if( m[x][y] == INF ) 60 { 61 printf( "%d\n", step[x][y] ); 62 return; 63 } 64 for( int i = 0; i < 4; ++i ) 65 { 66 int dx = x + dir[i][0]; 67 int dy = y + dir[i][1]; 68 if( dx >= 0 && dy >= 0 && ( m[dx][dy] == INF || m[dx][dy] > step[x][y]+1 ) && !mark[dx][dy] ) 69 { 70 mark[dx][dy] = 1; 71 step[dx][dy] = step[x][y] + 1; 72 q.push( P( dx, dy ) ); 73 } 74 } 75 } 76 puts( "-1" ); 77 } 78 79 int main() 80 { 81 scanf( "%d", &n ); 82 int a, b, c; 83 init(); 84 for( int i = 0; i < n; ++i ) 85 { 86 scanf( "%d%d%d", &a, &b, &c ); 87 m[a][b] = min( m[a][b], c ); 88 init1( a, b, c ); 89 } 90 bfs(); 91 return 0; 92 }

View Code

 

转载于:https://www.cnblogs.com/ADAN1024225605/p/4093705.html

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录
相关推荐