📄 1797.cpp
字号:
/* This Code is Submitted by wywcgs for Problem 1797 on 2005-11-10 at 23:01:27 */
#include <cstdio>
#include <cstring>
const int MAX = 32;
class Point {
public:
int x;
int y;
Point(int m = 0, int n = 0) {
x = m;
y = n;
}
};
bool visit[MAX][MAX];
char map[MAX][MAX];
int walk(const Point&);
int main()
{
int i, j;
int W, H;
Point begin;
for(i = 0; i < MAX; i++) {
map[0][i] = '#';
map[i][0] = '#';
}
while(scanf("%d %d", &W, &H) == 2) {
if(W == 0 && H == 0) {
return 0;
} else {
getchar();
for(i = 1; i <= H; i++) {
for(j = 1; j <= W; j++) {
map[i][j] = getchar();
if(map[i][j] == '@') {
begin.x = i;
begin.y = j;
}
}
map[i][W+1] = '#';
getchar();
}
for(i = 1; i <= W+1; i++) {
map[H+1][i] = '#';
}
memset(visit, false, sizeof(visit));
printf("%d\n", walk(begin));
}
}
return 0;
}
int walk(const Point& src)
{
Point *stack[MAX*MAX], *p;
int top = 0, n = 0;
stack[top++] = new Point(src.x, src.y);
n++;
visit[src.x][src.y] = true;
while(top > 0) {
p = stack[--top];
if(map[p->x-1][p->y] == '.' && !visit[p->x-1][p->y]) {
visit[p->x-1][p->y] = true;
n++;
stack[top++] = new Point(p->x-1, p->y);
}
if(map[p->x+1][p->y] == '.' && !visit[p->x+1][p->y]) {
visit[p->x+1][p->y] = true;
n++;
stack[top++] = new Point(p->x+1, p->y);
}
if(map[p->x][p->y-1] == '.' && !visit[p->x][p->y-1]) {
visit[p->x][p->y-1] = true;
n++;
stack[top++] = new Point(p->x, p->y-1);
}
if(map[p->x][p->y+1] == '.' && !visit[p->x][p->y+1]) {
visit[p->x][p->y+1] = true;
n++;
stack[top++] = new Point(p->x, p->y+1);
}
delete p;
}
return n;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -