题目链接http://poj.org/problem?id=1979
一个最基础的dfs搜索题
//#include <bits/stdc++.h>
#include "iostream"
#include "cstring"
using namespace std;
typedef long long ll;
int k[25][25];//标记数组
char c[25][25];
int ans = 0; //可走的步数
void dfs(int m, int n,int i,int j,char c[25][25]) {
if(c[i][j] == '#') return;
if(!k[i][j]) {
ans++;
k[i][j] = 1;
}
//递归搜索
if(i != 0 && !k[i-1][j]) dfs(m,n,i-1,j,c);
if(i != m-1 && !k[i+1][j]) dfs(m,n,i+1,j,c);
if(j != 0 && !k[i][j-1]) dfs(m,n,i,j-1,c);
if(j != n-1 && !k[i][j+1]) dfs(m,n,i,j+1,c);
}
int main(){
ios::sync_with_stdio(false);
int m,n,x,y;
while(cin >> m >> n && (m ||n)) {
memset(k,0,sizeof(k));
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++) {
cin >> c[i][j];
if(c[i][j] == '@'){
x = i;
y = j;
}
}
dfs(n,m,x,y,c);
cout << ans << endl;
ans = 0;
}
return 0;
}