BFS
C++ 代码
#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
const int N = 25;
int w, h;
char g[N][N];
int bfs(int x, int y)
{
int cnt=0;
queue<PII> q;
q.push({x, y});
g[x][y] = '#';
cnt++;
int dx[4] = {-1, 0, 1, 0} ,dy[4] = {0, 1, 0, -1};
while(q.size())
{
PII t= q.front();
q.pop();
for(int i=0; i<4; i++)
{
int a = t.x+dx[i], b = t.y + dy[i];
if(a<0||b<0||a>= h|| b>= w || g[a][b]!='.') continue;
g[a][b] = '#';
q.push({a, b});
cnt ++;
}
}
return cnt;
}
int main()
{
while(cin>>w>>h, w|h)
{
for(int i=0; i<h; i++) cin>>g[i];
int x, y;
for(int i=0; i<h; i++)
for(int j=0; j<w; j++)
if(g[i][j]=='@' )
{
x=i;
y=j;
break;
}
cout<<bfs(x, y)<<endl;
}
return 0;
}
DFS
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N =25;
char g[N][N];
int w, h;
int dfs(int x, int y)
{
int cnt =1;
g[x][y] = '#';
int dx[4] = {-1, 0, 1, 0} ,dy[4] = {0, 1, 0, -1};
for(int i =0; i<4; i++)
{
int a= x+dx[i], b = y + dy[i];
if(a>=0&&b>=0&&a<h&&b<w&&g[a][b]=='.')
{
cnt += dfs(a, b);
}
}
return cnt;
}
int main()
{
while(cin>>w>>h, w|h)
{
for(int i=0; i<h; i++) cin>>g[i];
int x, y;
for(int i=0; i<h; i++)
for(int j=0; j<w; j++)
if(g[i][j]=='@' )
{
x=i;
y=j;
break;
}
cout<<dfs(x, y)<<endl;
}
}