#include <iostream>
#include <string.h>
#include<stdio.h>
using namespace std;
char map[50][50];
bool vis[50][50];//记录访问点
int h,w;
int cnt;
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
bool ok(int x,int y){
if(x >= 0 && x < h && y >= 0 && y < w && map[x][y] == ‘.‘){
return true;
}
else{
return false;
}
}
void dfs(int x,int y){
cnt ++;
vis[x][y] = true;
int i;
for(i = 0;i < 4;i++){
int x1 = x + dir[i][0];//一定注意是从零开始,我就是从一开始的,最终浪费了很大的功夫检查,到最后才发现出现在这个地方。
int y1 = y + dir[i][1];
if(!vis[x1][y1] && ok(x1,y1)){
dfs(x1,y1);
}
}
return;
}
int main()
{
int x = 0,y = 0;
int i,j;
while(cin >> w >> h){
if(w == 0 && h == 0){
break;
}
getchar();
memset(vis,false,sizeof(vis));
for(i = 0;i < h;i ++){
for(j = 0;j < w;j++){
cin >> map[i][j];
if(map[i][j] == ‘@‘){
x = i;
y = j;
}
}
}
getchar();
cnt = 0;
dfs(x,y);
cout << cnt << endl;
}
return 0;
}
/*
....#.
.....#
......
......
......
......
......
#@...#
.#..#.
*/
原文:http://www.cnblogs.com/2016zhanggang/p/5423051.html