AtCoder Beginner Contest 213 E - Stronger Takahashi(01BFS)

简介: AtCoder Beginner Contest 213 E - Stronger Takahashi(01BFS)

原题链接

思路:

很容易想到b f的思路,实际上边权只有两种:

1.如果下一个点可以走,则边权为0

2.如果下一个点不可以走,则边权为1,同时周围的点也可以以同样的代价到达。

所以就考虑01 b f s,每当有边权为0的就插入队头,有边权为1的就插入队尾,这样可以保证每次取出的都是最小的,保证队列的单调性跟算法的正确性。

细节的地方为选择一个不能走的点时,周围的同样代价的点如何确定。

最后,题解里推荐了个同类型的题目。

代码:

struct node{
  int x,y,step;
};
char mp[510][510]; 
int n,m,vis[510][510];
int nx[]={1, 0, -1, 0};
int ny[]={0, 1, 0, -1};
int bfs(){
  deque<node>q;
  q.push_front({1,1,0});
  while(!q.empty()){
    node t=q.front();q.pop_front();
    int x=t.x,y=t.y,step=t.step;
    if(vis[x][y]) continue;
    vis[x][y]=1;
    if(x==n&&y==m) return step;
    for(int k=0;k<4;k++){
      int xx=x+nx[k],yy=y+ny[k];
      if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&!vis[xx][yy]){
        if(mp[xx][yy]=='.') q.push_front({xx,yy,step});
        else{
          for(int i=-1;i<=1;i++){
            for(int j=-1;j<=1;j++){
              int n_x=xx+i,n_y=yy+j;
              if(n_x>=1&&n_x<=n&&n_y>=1&&n_y<=m&&!vis[n_x][n_y]){
                q.push_back({n_x,n_y,step+1});
              }
            }
          }
        }
      }
    }
  }
  return -1;
}
int main(){
  n=read,m=read;
  rep(i,1,n) cin>>mp[i]+1;
  cout<<bfs()<<endl;  
  return 0;
} 
目录
相关文章
|
7月前
Knight Moves(POJ2243)
Knight Moves(POJ2243)
AtCoder Beginner Contest 176 D - Wizard in Maze(01BFS)
AtCoder Beginner Contest 176 D - Wizard in Maze(01BFS)
120 0
|
机器学习/深度学习 人工智能 Java
AtCoder Beginner Contest 215 D - Coprime 2 (质因子分解 gcd)
AtCoder Beginner Contest 215 D - Coprime 2 (质因子分解 gcd)
115 0
AtCoder Beginner Contest 221 E - LEQ(组合数学 树状数组)
AtCoder Beginner Contest 221 E - LEQ(组合数学 树状数组)
158 0
|
机器学习/深度学习
AtCoder Beginner Contest 218 C - Shapes (模拟)
AtCoder Beginner Contest 218 C - Shapes (模拟)
151 0
|
人工智能
atcoder AtCoder Beginner Contest 210 D - National Railway(dp)
atcoder AtCoder Beginner Contest 210 D - National Railway(dp)
119 0
|
Perl
AtCoder Beginner Contest 217 F - Make Pair (区间dp)
AtCoder Beginner Contest 217 F - Make Pair (区间dp)
128 0
|
机器学习/深度学习
AtCoder Beginner Contest 218 F - Blocked Roads (最短路径还原 思维)
AtCoder Beginner Contest 218 F - Blocked Roads (最短路径还原 思维)
101 0

热门文章

最新文章