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; }