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 }
  • 相关阅读:
    背水一战 Windows 10 (90)
    背水一战 Windows 10 (89)
    背水一战 Windows 10 (88)
    背水一战 Windows 10 (87)
    背水一战 Windows 10 (86)
    背水一战 Windows 10 (85)
    背水一战 Windows 10 (84)
    背水一战 Windows 10 (83)
    背水一战 Windows 10 (82)
    背水一战 Windows 10 (81)
  • 原文地址:https://www.cnblogs.com/quintessence/p/6124011.html
Copyright © 2011-2022 走看看