zoukankan      html  css  js  c++  java
  • poj Meteor Shower

    这道题是下流星,流星会下到上下左右中的位置,而且有时间的,要你求出最短到达安全位置的时间。

    这道题要注意边界是可以超过300的

    #include<stdio.h>
    #include<algorithm>
    #include<queue>
    #include<string.h>
    using namespace std;
    typedef pair<int,int> P;
    #define INF 0x3f3f3f3f
    queue<P>q;
    int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
    int d[306][306];
    int dd[306][306];
    int gx,gy;
    int flag=0;
    int dfs()
    {
        memset(dd,INF,sizeof(dd));
        q.push(P(0,0));
        dd[0][0]=0;
        while(q.size())
        {
            P p=q.front();q.pop();
            if(d[p.first][p.second]==INF){
                    gx=p.first;
                    gy=p.second;
                    flag=1;
                  break;
            }
            for(int i=0;i<4;i++)
            {
                int nx=p.first+dx[i],ny=p.second+dy[i];
                if(0<=nx&&nx<=305&&0<=ny&&ny<=305&&dd[nx][ny]==INF)
                  {//printf("%d %d %d
    ",nx,ny,d[nx][ny]);
                      dd[nx][ny]=dd[p.first][p.second]+1;
                      if(dd[nx][ny]<d[nx][ny])
                      q.push(P(nx,ny));
                  }
            }
        }
        if(flag)
        return dd[gx][gy];
        else return -1;
    }
    int main()
    {
       int m,x,y,t,n;
       scanf("%d",&n);
       memset(d,INF,sizeof(d));
       for(int i=0;i<n;i++)
       {
           scanf("%d %d %d",&x,&y,&t);
           d[x][y]=min(d[x][y],t);
         for(int i=0;i<4;i++)
          {
              int nx=x+dx[i],ny=y+dy[i];
              if(0<=nx&&nx<=305&&0<=ny&&ny<=305)
             d[nx][ny]=min(d[nx][ny],t);
          }
       }
       int res=dfs();
       printf("%d
    ",res);
    }
  • 相关阅读:
    缅怀
    74LS164的使用
    跑步
    Datasheet,你会读么?[转]
    清华附小给的书单
    iOS-小知识
    网络-GET&POST
    网络-基础
    网络-HTTP其他常见方法
    数据解析
  • 原文地址:https://www.cnblogs.com/zhgyki/p/8983039.html
Copyright © 2011-2022 走看看