⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1797.cpp

📁 这是哈尔滨工业大学acmOJ的源代码
💻 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 + -