Problem : [Usaco2010 Feb]feedtime 喫飯時間

Problem : [Usaco2010 Feb]feedtime 喫飯時間

Description
Bessie的喫飯時間到了,Farmer John正在決定把她放到哪裏。 FJ的農場由W x H (1 <= W <= 750; 1 <= H <= 75
0)個小格子組成。農場被岩石,分割成若干大大小小的牧場。每個牧場包含一些草地和岩石。 Bessie是一頭飢餓
的小奶牛,只喜歡喫,喫,喫。她可以從一個格子走到水平、垂直或對角相鄰的任何一個格子。 Bessie不能經過
有岩石的格子,因爲那會弄傷她的腳,當然,她也不能離開農場。 Bessie想知道,她最多可以喫到多少格子的牧
草。 FJ有一張農場的地圖,’.’表示一格牧草,’*’表示一塊岩石。請看一張10*8的地圖和三個牧場分開表示
的明細圖。

牧場1有21個格子;牧場2有18個格子;牧場3有2個格子。因此Bessie爲了喫到最多格子的草,應該選擇牧場1。
Input
* 行 1: 兩個空格隔開的整數: W 和 H * 行 2..H+1: 第i+1行包含W個字符,每個字符爲’.’ 或 ‘*’,描述地圖的
第i行。
Output
* 行 1: 一個整數,表示Bessie最多可以喫到的多少格子的牧草。
Sample Input
10 8
….*
..….
….*
.*.
..**
.*.
.
*..
Sample Output
21

#include<iostream>
using namespace std;
int h,w,sum;
bool x[1000][1000];
void bFS(int i,int j)
{
    if(i==0||i>h||j==0||j>w||x[i][j]==false)return;
    sum++;
    x[i][j]=false;
    bFS(i+1,j+1);
    bFS(i+1,j);
    bFS(i+1,j-1);
    bFS(i,j+1);
    bFS(i,j);
    bFS(i,j-1);
    bFS(i-1,j+1);
    bFS(i-1,j);
    bFS(i-1,j-1);
}
int main()
{
    int max=0;
    char ch;
    scanf("%d%d",&w,&h);
    for(int i=1;i<=h;i++)
    for(int j=1;j<=w;j++)
    {
        cin>>ch;
        if(ch=='.')x[i][j]=true;
        else x[i][j]=false;
    }
    for(int i=1;i<=h;i++)
    for(int j=1;j<=w;j++)
    {
        sum=0; 
        bFS(i,j);
        if(sum>max)max=sum;
    }
    printf("%d",max);
    return 0; 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章