(紀中)2407. Bucket Brigade【BFS】

(File IO): input:buckets.in output:buckets.out
時間限制: 1000 ms 空間限制: 262144 KB 具體限制
Goto ProblemSet


題目描述
農場上起火了,奶牛們正在緊急趕去滅火!
農場可以用一個像這樣的10×1010×10的字符方陣來描述:
字符B'B'表示正着火的牛棚。字符L'L'表示一個湖,而字符’RR'表示農場上的一塊巨大岩石。奶牛們想要沿着一條湖到牛棚之間的路徑組成一條“水桶傳遞隊列”,這樣她們就可以沿着這條路徑傳遞水桶來幫助滅火。當兩頭奶牛在東南西北四個方向上相鄰時水桶可以在她們之間傳遞。這對於湖邊的奶牛也是對的——奶牛只能在緊挨着湖的時候才能用水桶從湖裏取水。類似地,奶牛只能在緊挨着牛棚的時候才能用水去滅牛棚的火。
請幫助求出奶牛們爲了組成這樣的“水桶傳遞隊列”需要佔據的’.'格子的最小數量。奶牛不能站在岩石所在的方格之內,此外保證牛棚和湖不是相鄰的。


輸入
輸入包含1010行,每行1010個字符,描述這個農場的佈局。輸入保證圖案中恰有一個字符B'B'、一個字符L'L'以及一個字符R'R'

輸出
輸出一個整數,爲組成一條可行的水桶傳遞隊列所需要的奶牛的最小數量。


樣例輸入



…B…

…R…


…L…

樣例輸出
7


數據範圍限制


提示
在這個例子中,以下是其中一個可行的方案,使用了最小數量的奶牛(7):
....................
....................
....................
..B.........B.......
..C.........C.......
..CC.R......CC.R....
...CCC.......CCC....
.....C.........C....
.....L.........L....
....................


解題思路
BFSBFS(板子題)暴力


代碼

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
const int dx[5]={0,1,-1,0,0};
const int dy[5]={0,0,0,1,-1};
char a[15][15];
int f[15][15],v[15][15],st[110][3],h,t,a1,b,c,d;
bool check(int x,int y)
{
	if(x>0&&x<=10&&y>0&&y<=10&&!v[x][y]&&f[x][y]!=1)
	return 1;
	else
	return 0;
}
int main(){
   freopen("buckets.in","r",stdin);
   freopen("buckets.out","w",stdout);
    for(int i=1;i<=10;i++)
    {
        for(int j=1;j<=10;j++)
        {
            cin>>a[i][j];
            if(a[i][j]=='.') f[i][j]=0;
            if(a[i][j]=='R') f[i][j]=1;
            if(a[i][j]=='L') a1=i,b=j;
            if(a[i][j]=='B')
                f[i][j]=2,c=i,d=j;
        }
    }
    h=0,t=1;
    st[1][1]=a1;
	st[1][2]=b;
	st[1][3]=0;
	while(h<t){
		h++;
		for(int k=1;k<=4;k++)
		{
			if(check(st[h][1]+dx[k],st[h][2]+dy[k])){
			   t++;
			   st[t][1]=st[h][1]+dx[k];
			   st[t][2]=st[h][2]+dy[k];
			   st[t][3]=st[h][3]+1;
			   v[st[t][1]][st[t][2]]=1;
			   if(st[t][1]==c&&st[t][2]==d)
			   {
			      cout<<st[t][3]-1;
			      h=85200;
			      t=0;
			      break;
			   }
			} 
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章