• (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 }
  • 相关阅读:
    spring boot中创建ElasticSearch索引
    spring boot项目16:ElasticSearch-基础使用
    spring cloud项目07:网关(Gateway)(2)
    spring cloud项目06:网关(Gateway)(1)
    Ubuntu上MySQL多实例部署
    MySQL常用命令、配置汇总
    spring boot项目15:安全-基础使用(2)
    spring boot项目14:安全-基础使用(1)
    docker-compose mongodb 副本
    关于golang slice切片的一个问题
  • 原文地址:https://www.cnblogs.com/quintessence/p/6124011.html
Copyright © 2020-2023  润新知