POJ - 1979

题目:

Red and Black - POJ 1979 - Virtual Judge

分析:

基础BFS。

统计BFS搜索到的点的个数。

使用知识:BFS,模拟队列。

代码:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>

using namespace std;

const int N = 100;

struct Point
{
	int x;
	int y;
}q[10000];

int n, m;
char road[N][N];
bool vis[N][N];
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};

int bfs(int a, int b)
{
	int hh = 0, tt = 0, cnt = 0;
	q[0] = {a, b};
	vis[a][b] = true;
	
	while (hh <= tt)
	{
		Point t = q[hh ++];
		
		for (int i = 0; i < 4; i ++ )
		{
			int xx = t.x + dx[i];
			int yy = t.y + dy[i];
			if (xx >= 0 && xx < n && yy >= 0 && yy < m && !vis[xx][yy] &&
			road[xx][yy] == '.')
			{
				vis[xx][yy] = true;
				q[++ tt] = {xx, yy};
				cnt ++ ;
			}
		}
	}
	
	return cnt;
}

int main()
{
	while (scanf("%d%d", &m, &n))
	{
		if (n == 0 && m == 0) break;
		
		memset(vis, 0, sizeof(vis));
		memset(road, 0, sizeof(road));
		
		for (int i = 0; i < n; i ++ )
			scanf("%s", road[i]);
			
		for (int i = 0; i < n; i ++ )
		{
			for (int j = 0; j < m; j ++ )
			{
				if (road[i][j] == '@')
				cout << bfs(i, j) + 1 << endl;
			}
		}
	}
    return 0;
}

上一篇:路径展开


下一篇:2022/1/20总结