很简单,注意w,h的含义和二维字符数组输入
#include <stdio.h>
#include <string.h>
char map[25][25];
int visted[25][25];
int w,h,cnt;
int dir[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
void dfs(int x,int y)
{
if(x>=h||x<0||y>=w||y<0)
return;
if(map[x][y]=='.'&&visted[x][y]==0)
{
++cnt;
visted[x][y]=1;
for(int k=0;k<4;k++)
dfs(x+dir[k][0],y+dir[k][1]);
}
return;
}
int main()
{
int i,j;
int sx,sy;
while(~scanf("%d %d",&w,&h)&&w)
{
for(i=0;i<h;i++)
scanf("%s",map[i]);
/* printf("%c",map[i][j]); printf("*********\n"); if(map[i][j]=='.') */
memset(visted,0,sizeof(visted));
sx=-1;
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
if(map[i][j]=='@')
{
sx=i;
sy=j;
map[i][j]='.';
break;
}
}
if(sx!=-1)
break;
}
cnt=0;
dfs(sx,sy);
printf("%d\n",cnt);
}
return 0;
}