继续水深搜。
和昨天的题目一样样的。只是只有四个方向了而已。
AC代码:
#include<iostream>
using namespace std;
#define MAXN 25
int h, l,rec[MAXN][MAXN],vis[MAXN][MAXN],num;
void dfs(int i,int j){
if (rec[i][j] == 0 || vis[i][j] == 1){
return;
}
num++;
vis[i][j] = 1;
dfs(i - 1, j);
dfs(i + 1, j);
dfs(i, j - 1);
dfs(i, j + 1);
}
int main(){
// freopen("TestDate.txt", "r", stdin);
int i, j,si,sj;
char ch;
while (cin >> l >> h && (h != 0 && l != 0)){
memset(rec, 0, sizeof(rec));
memset(vis, 0, sizeof(vis));
for (i = 1; i <= h; i++){
for (j = 1; j <= l; j++){
cin >> ch;
if (ch == '.'){
rec[i][j] = 1;
}
else if (ch == '#'){
rec[i][j] = 0;
}
else if (ch == '@'){
rec[i][j] = 2;
si = i;
sj = j;
}
}
}
num = 0;
dfs(si, sj);
cout << num << endl;
}
return 0;
}