zoukankan      html  css  js  c++  java
  • (BFS)poj3669-Meteor Shower

    题目地址

      为判断某时刻能否走到某位置,建立shi数组,记录某位置最早t时刻就不能走。(初始化为-1)之后开始从(0,0)出发bfs,用bu数组记录走到某一位置时花费的步数,并且需要用vi数组记录是否走到过某个位置,不然慧反复走出错。注意可走的范围是第一象限,只是输入的陨石掉落位置是0——300。(之前因为这个判断位置是否合法WA了……)。

      参考代码:

      

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<queue>
     4 #include <iostream>
     5 using namespace std;
     6 int shi[305][305],m,bu[305][305],dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
     7 bool vi[305][305];
     8 typedef pair<int ,int >P;
     9 int si,sj,t;
    10 int bfs()
    11 {
    12     queue<P> que;
    13     P p;
    14     que.push(P(0,0));
    15     while(que.size())
    16     {
    17         p=que.front();
    18         que.pop();
    19         if(shi[p.first][p.second]==-1)
    20             return bu[p.first][p.second];
    21         int i,xx,yy;
    22         for(i=0;i<4;i++)
    23         {
    24             xx=p.first+dir[i][0];
    25             yy=p.second+dir[i][1];
    26             if(xx>=0&&xx<=302&&yy>=0&&yy<=302&&(shi[xx][yy]==-1||bu[p.first][p.second]+1<shi[xx][yy])&&!vi[xx][yy])
    27                 {
    28                 que.push(P(xx,yy));
    29                 bu[xx][yy]=bu[p.first][p.second]+1;
    30                 vi[xx][yy]=true;
    31                 }
    32         }
    33     }
    34     return -1;
    35 }
    36 int main()
    37 {
    38     memset(shi,-1,sizeof(shi));
    39     memset(bu,0,sizeof(bu));
    40     memset(vi,false,sizeof(vi));
    41     scanf("%d",&m);
    42     int i,an;
    43     while(m--)
    44     {
    45         scanf("%d%d%d",&si,&sj,&t);
    46         if(shi[si][sj]==-1||shi[si][sj]>t)
    47             shi[si][sj]=t;
    48         for(i=0;i<4;i++)
    49         {
    50             int xx,yy;
    51             xx=si+dir[i][0];
    52             yy=sj+dir[i][1];
    53             if(xx>=0&&xx<=302&&yy>=0&&yy<=302&&(shi[xx][yy]>t||shi[xx][yy]==-1))
    54                 shi[xx][yy]=t;
    55         }
    56     }
    57     vi[0][0]=true;
    58     an=bfs();
    59     printf("%d
    ",an);
    60     return 0;
    61 }
  • 相关阅读:
    (4.15)存储DAS,NAS,SAN在数据库存储上的应用
    (4.14)存储:RAID在数据库存储上的应用
    关于like %%的优化思路
    (4.13)SQL Server profile使用、数据库优化引擎顾问使用
    图形界面执行计划图标释义
    (4.15)全文索引的使用
    倒排索引/全文搜索基本原理
    SQLServer: 用 ApexSQLLog 恢复 SQL Server 数据
    (4.12)2012及以上列存储索引
    教你管理SQL实例系列(1-15)
  • 原文地址:https://www.cnblogs.com/quintessence/p/6124011.html
Copyright © 2011-2022 走看看