简单DFS。
CODE:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int x, y;
int tot;
int n, m;
char maze[21][21];
void dfs(int x, int y, int& tot)
{
if(x >= 0 && y >= 0 && x < n && y < m && maze[x][y] == '.' || maze[x][y] == '@')
{
tot++;
maze[x][y]= '#';
dfs(x+1, y, tot);
dfs(x-1, y, tot);
dfs(x, y+1, tot);
dfs(x, y-1, tot);
}
}
int main()
{
int i, j;
while(~scanf("%d%d", &m, &n), n, m)
{
tot = 0;
memset(maze, 0, sizeof(maze));
for(i = 0; i < n; i++)
{
scanf("%s", maze[i]);
}
for(i = 0; i < n; i++)
{
for(j = 0; j < m; j++)
{
if(maze[i][j] == '@')
{
dfs(i, j, tot);
break;
}
}
}
printf("%d\n", tot);
}
return 0;
#include <stdlib.h>
#include <string.h>
using namespace std;
int x, y;
int tot;
int n, m;
char maze[21][21];
void dfs(int x, int y, int& tot)
{
if(x >= 0 && y >= 0 && x < n && y < m && maze[x][y] == '.' || maze[x][y] == '@')
{
tot++;
maze[x][y]= '#';
dfs(x+1, y, tot);
dfs(x-1, y, tot);
dfs(x, y+1, tot);
dfs(x, y-1, tot);
}
}
int main()
{
int i, j;
while(~scanf("%d%d", &m, &n), n, m)
{
tot = 0;
memset(maze, 0, sizeof(maze));
for(i = 0; i < n; i++)
{
scanf("%s", maze[i]);
}
for(i = 0; i < n; i++)
{
for(j = 0; j < m; j++)
{
if(maze[i][j] == '@')
{
dfs(i, j, tot);
break;
}
}
}
printf("%d\n", tot);
}
return 0;
}