zoukankan      html  css  js  c++  java
  • POJ 3669

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

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

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cstdlib>
     4 #include <cctype>
     5 #include <cmath>
     6 #include <time.h>
     7 #include <string>
     8 #include <map>
     9 #include <stack>
    10 #include <set>
    11 #include <queue>
    12 #include <vector>
    13 #include <algorithm>
    14 #include <iostream>
    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 <P> 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
    ", 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
  • 相关阅读:
    简单封装万维易源(showapi)ip归属地查询接口
    修改七牛上传域名
    深度探索C++对象模型 个人总结 第四章 Function语意学
    深度探索C++对象模型 个人总结 第三章 Data语意学
    深度探索C++对象模型 个人总结 第二章 构造函数语意学
    深度探索C++对象模型 个人总结 第一章 关于对象
    《More Effective C++》 个人总结
    《Effective C++》个人总结
    C++ Primer第5版 第十九章课后练习答案
    C++ Primer第5版 第十八章课后练习答案
  • 原文地址:https://www.cnblogs.com/ADAN1024225605/p/4093705.html
Copyright © 2011-2022 走看看