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