Http://livearchive.onlinejudge.org/index.php? Option = com_onlinejudge & page = show_problem & problem = 1722
BFS is very brain-damaged. Do not mark it when looking for water!
#include<iostream>#include<vector>#include<stack>#include<algorithm>#include<queue>#include<list>#include<set>#include<string.h>#include<stdlib.h>#include<math.h>#include<stdio.h>#include<ctype.h>#include<iomanip>using namespace std;#define LL long long#define pi acos(-1)char map[410][410];int vis[410][410];double l,s;int n;int d[4][2]={{-1,0},{1,0},{0,-1},{0,1}};void init(){ int i,j; for(i=0;i<=n+1;i++) for(j=0;j<=n+1;j++) { map[i][j]='.'; vis[i][j]=0; }}void bfs(int x,int y){ int i,j,k; int xx,yy; for(i=0;i<4;i++) { xx=x+d[i][0]; yy=y+d[i][1]; if(map[xx][yy]=='.') l++; } for(i=0;i<4;i++) { xx=x+d[i][0]; yy=y+d[i][1]; if(xx>0 && xx<=n &&yy>0 &&yy<=n &&map[xx][yy]=='X' && vis[xx][yy]==0) { vis[xx][yy]=1; s++; bfs(xx,yy); } }}int main(){ //freopen("a.txt","r",stdin); int i,j,k; while(scanf("%d",&n)&&n) { init(); double min=99999999,max=0; for(i=1;i<=n;i++) { getchar(); for(j=1;j<=n;j++) { scanf("%c",&map[i][j]); } } double temp; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(map[i][j]=='X' && vis[i][j]==0) { vis[i][j]=1; l=0; s=1; bfs(i,j); if(s==0)break; if(l/s<min)min=l/s; if(l/s>max)max=l/s; } } printf("%.4f %.4f\n",max,min); } return 0;}