//题意:一个起始地点‘@’,‘#’代表墙不能走,‘.’可以走的点,问能够走的 '.'有多少个
//思路:用dfs思路将起始点的坐标获取到,通过题目要求只能走的四个方向确立一个规则树,然后向下搜索即可。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int dir[4][2] = {-1, 0, 1, 0, 0, -1, 0, 1}; //上下左右四个方向
int vis[25][25]; //是否已经搜索过标记
int w, h; //列、行
int cnt; //计算个数
void dfs(int x, int y)
{
if(vis[x][y])
return ;
else{
cnt++;
vis[x][y] = 1;
}
for(int i = 0; i < 4; i++){
int dx = x + dir[i][0]; //下一个横坐标
int dy = y + dir[i][1]; //下一个纵坐标
if(dx >= 0 && dx <= h -1 && dy >= 0 && dy <= w - 1){
dfs(dx, dy);
}
}
}
int main()
{
int x, y; //横纵坐标
char maze[25][25];
while(scanf("%d%d", &w, &h) != EOF && (w || h)){
memset(vis, 0, sizeof(vis));
cnt = 0;
for(int i = 0; i < h; i++){
getchar();
for(int j = 0; j < w; j++){
scanf("%c", &maze[i][j]);
if(maze[i][j] == '@'){
x = i;
y = j;
} else if(maze[i][j] == '#'){
vis[i][j] = 1;
}
}
}
dfs(x, y);
cout << cnt << endl;
}
return 0;
}
hdu1312
最新推荐文章于 2024-01-17 08:41:17 发布