- C++
--TJ 20250119
- 2025-1-19 13:23:25 @
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int N = 25;
int n, m;
char a[N][N];
int vis[N][N];
int ans = 0;
int dx[] = {-1, 1, 0, 0}, dy[] = {0, 0, -1, 1};
int sx, sy;
struct Point{
int x, y;
}
void bfs()
{
queue<Point> mq;
mq.push({sx, sy});
while(mq.size())
{
/////......pop()
for(int i = 0; i < 4; i++)
{
int cx = x + dx[i], cy = y + dy[i];
if(cx < 1 || cx > n || cy < 1 || cy > m) continue;
if(vis[cx][cy]) continue;
if(a[cx][cy] == '#')continue;
ans++;
vis[cx][cy] = 1;
push();
}
}
void dfs(int x, int y)
{
for(int i = 0; i < 4; i++)
{
int cx = x + dx[i], cy = y + dy[i];
if(cx < 1 || cx > n || cy < 1 || cy > m) continue;
if(vis[cx][cy]) continue;
if(a[cx][cy] == '#')continue;
ans++;
vis[cx][cy] = 1;
dfs(cx,cy);
vis[cx][cy] = 0;
}
}
int main(void)
{
while(1)
{
cin >> m >> n;
if(n == 0 && m == 0) break;
for(int i = 1; i <= n; i++) cin >> (a[i] + 1);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m;j++)
if(a[i][j] == '@') sx= i,sy = j;
ans = 1;
memset(vis, 0, sizeof vis);
vis[sx][sy] = 1;
dfs(sx, sy);
cout << ans << endl;
}
return 0;
}
0 条评论
目前还没有评论...