0分 求求大佬捞一下吧
查看原帖
0分 求求大佬捞一下吧
636358
WindyDay楼主2022/10/28 22:20

代码:

#include <iostream>
#include <queue>
using namespace std;

const int dx[4] = {0, 0, 1, -1};
const int dy[4] = {1, -1, 0, 0};

struct Point
{
	int x, y;
	void point(int x_, int y_)
	{
		x = x_;
		y = y_;
	}
};

int n, m;
char mp[505][505];
bool visit[505][505];

Point tmp;

void bfs(int x, int y);

int main(int argc, char **argv)
{
	memset(mp, '0', sizeof(mp));
	cin >> n >> m;
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= m; j++)
		{
			cin >> mp[i][j];
			if(mp[i][j] == '*')
			{
				visit[i][j] = 1;
			}
		}
	}
	bfs(0, 0);
	int ans = 0;
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1; j <= m; j++)
		{
			if(!visit[i][j]) ans++;
		}
	}
	cout << ans << endl;
	return 0;
}

void bfs(int x, int y)
{
	queue<Point> poq;
	for(int i = 0; i <= n + 1; i++)
	{
		tmp.point(i, 0);
		poq.push(tmp);
		tmp.point(i, m + 1);
		poq.push(tmp);
	}
	for(int j = 0; j <= m + 1; j++)
	{
		tmp.point(0, j);
		poq.push(tmp);
		tmp.point(n + 1, j);
		poq.push(tmp);
	}
	while(!poq.empty())
	{
		tmp = poq.front();
		poq.pop();
		for(int i = 0; i < 4; i++)
		{
			int nx = tmp.x + dx[i];
			int ny = tmp.y + dy[i];
			if(nx > n || nx < 1 || ny > m || ny < 1) continue;
			if(visit[nx][ny]) continue;
			cout << "Goto x = " << nx << ", y = " << ny << "Value = " << mp[nx][ny] << endl;
			visit[nx][ny] = 1;
			tmp.point(nx, ny);
			poq.push(tmp);
		}
	}
}

2022/10/28 22:20
加载中...