G. Bucket Brigade

G. Bucket Brigade

https://codeforces.com/group/5yyKg9gx7m/contest/269908/problem/G

题目描述:

B点着火了,奶牛们要搭一条从L到B到的桥来传水救火。问桥的长度。

分析:

R不能走,求从B走到L的最短路。标准的bfs题。

代码:

#include <stdio.h>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
#include <iostream>
using namespace std;
struct dio
{
    int y,x;
    char c;
    int d;
}pos[15][15];
queue <dio> q;
int d[3]={-1,0,1};
int bfs()
{
    while(!q.empty())
    {
        struct dio p=q.front();
        q.pop();
        for(int i=0;i<3;i++)
        {
            for(int j=0;j<3;j++)
            {
                if(abs(d[i])+abs(d[j])!=1) continue;
                int dx=p.x+d[i],dy=p.y+d[j];
                if(dx<=0||dx>10||dy<=0||dy>10) continue;
                if(pos[dy][dx].c=='.')
                {   
                    pos[dy][dx].d=p.d+1;
                    pos[dy][dx].c='J';
                    q.push(pos[dy][dx]);
                }
                else if(pos[dy][dx].c=='L')
                {
                    return p.d;
                }
            }
        }
    }
    
}
int main()
{
    int by,bx,ey,ex;
    for(int i=1;i<=10;i++)
    {
        for(int j=1;j<=10;j++)
        {
            cin>>pos[i][j].c;
            pos[i][j].y=i;
            pos[i][j].x=j;
            if(pos[i][j].c=='B')
            {
                q.push(pos[i][j]);
                pos[i][j].d=0;
            }
        }
    }
    cout<<bfs()<<endl;
    return 0;
} 

 

 

posted on 2020-02-23 20:45  Aminers  阅读(112)  评论(0编辑  收藏  举报

导航