http://acm.pku.edu.cn/JudgeOnline/problem?id=1111

Код:
#include<stdio.h>
char image[20][20];
int note[20][20];
int res=0;
int row,column;
void expand(int x,int y);
int main(){
int clickx,clicky;
int i,j;
while(1){
scanf("%d%d%d%d",&row,&column,&clickx,&clicky);
if(row==0&&column==0&&clickx==0&&clicky==0) break;
for(i=0;i<row;i++) scanf("%s",image[i]);
for(i=0;i<row;i++)
for(j=0;j<column;j++)
note[i][j]=0;
res=0;
expand(clickx-1,clicky-1);
printf("%d\n",res);
}
return 0;
}
void expand(int x,int y){
if(image[x][y]=='.') return;
note[x][y]=1;
if(image[x-1][y]=='.'||x-1<0) res+=1;
else if(!note[x-1][y]) expand(x-1,y);
if(image[x+1][y]=='.'||x+1>=row) res+=1;
else if(!note[x+1][y]) expand(x+1,y);
if(image[x][y-1]=='.'||y-1<0) res+=1;
else if(!note[x][y-1]) expand(x,y-1);
if(image[x][y+1]=='.'||y+1>=column) res+=1;
else if(!note[x][y+1]) expand(x,y+1);
if(x-1>=0&&y-1>=0)
if(image[x-1][y-1]=='X'&&!note[x-1][y-1]) expand(x-1,y-1);
if(x-1>=0&&y+1<column)
if(image[x-1][y+1]=='X'&&!note[x-1][y+1]) expand(x-1,y+1);
if(x+1<row&&y-1>=0)
if(image[x+1][y-1]=='X'&&!note[x+1][y-1]) expand(x+1,y-1);
if(x+1<row&&y+1<column)
if(image[x+1][y+1]=='X'&&!note[x+1][y+1]) expand(x+1,y+1);
return;
}