6 9 ....#. .....# ...... ...... ...... ...... ...... #@...# .#..#. 11 9 .#......... .#.#######. .#.#.....#. .#.#.###.#. .#.#..@#.#. .#.#####.#. .#.......#. .#########. ........... 11 6 ..#..#..#.. ..#..#..#.. ..#..#..### ..#..#..#@. ..#..#..#.. ..#..#..#.. 7 7 ..#.#.. ..#.#.. ###.### ...@... ###.### ..#.#.. ..#.#.. 0 0
45 59 6 13
#include<stdio.h>
#include<string.h>
char map[1001][1001];
int visit[1001][1001];
int count,n,m;
void dfs(int a,int b)
{
if(a<0||b<0||a>=1001||b>=1001)
return ;
if(!visit[a-1][b]&&map[a-1][b]=='.')
{
visit[a-1][b]=1;
count++;
dfs(a-1,b);
// visit[n-1][m]=0;
}
if(!visit[a][b-1]&&map[a][b-1]=='.')
{
visit[a][b-1]=1;
count++;
dfs(a,b-1);
// visit[n][m-1]=0;
}
if(!visit[a+1][b]&&map[a+1][b]=='.')
{
visit[a+1][b]=1;
count++;
dfs(a+1,b);
// visit[n+1][m]=0;
}
if(!visit[a][b+1]&&map[a][b+1]=='.')
{
visit[a][b+1]=1;
count++;
dfs(a,b+1);
// visit[n][m+1]=0;
}
else
return ;
}
int main()
{
int i,j;
while(~scanf("%d%d",&n,&m),n||m)
{
count=1;
memset(visit,0,sizeof(visit));
memset(map,'#',sizeof(map));//这个一定要加上,就因为这个疏忽,我足足调试了一中午。。。
for(i=0;i<m;++i)
{
scanf("%s",map[i]);
}
for(i=0;i<m;++i)
{
for(j=0;j<n;++j)
{
if(map[i][j]=='@')
{
dfs(i,j);
printf("%d\n",count);
break;
}
}
}
}
return 0;
} 原文:http://blog.csdn.net/ice_alone/article/details/41897243