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

猜你喜欢

转载自blog.csdn.net/qq_41654438/article/details/81624611