BFS写法
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
const int N = 25;
#define x first
#define y second
typedef pair <int,int> PII;
char g[N][N];
int n,m;
int dx[] = {-1,0,1,0},dy[] = {0,1,0,-1};
int bfs(int sx, int sy){
queue<PII> q;
q.push({sx, sy});
g[sx][sy] = '#';
int res = 0;
while(q.size()){
auto t = q.front();
q.pop();
res++;
for(int i=0;i<4;i++){
int x = t.x +dx[i], y = t.y+dy[i];
if(x<0 || x>=n || y<0|| y>=m ||g[x][y]!='.')
continue;
g[x][y] = '#';
q.push({x,y});
}
}
return res;
}
int main(){
while((cin>>m>>n, n || m){
int x,y;
int res=0;
for(int i=0;i<n;i++) cin>>g[i];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
if(g[i][j] == '@'){
x = i;
y = j;
}
}
cout<<bfs(x,y)<<endl;
}
return 0;
}
DFS写法
#include <iostream>
using namespace std;
const int N = 25;
char g[N][N];
int n,m;
int dx[] = {-1,0,1,0},dy[] = {0,1,0,-1};
int dfs(int x, int y){
int res = 1;
g[x][y] = '#';
for(int i=0;i<4;i++){
int a = x + dx[i], b= y+dy[i];
if(a>=0 && a<n && b>=0 && b<m && g[a][b]=='.')
res += dfs(a,b);
}
return res;
}
int main(){
while(cin>>m>>n, n || m){
int x,y;
int res=0;
for(int i=0;i<n;i++) cin>>g[i];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
if(g[i][j] == '@'){
x = i;
y = j;
}
}
cout<<dfs(x,y)<<endl;
}
return 0;
}