为何报错
  • 板块学术版
  • 楼主happybob
  • 当前回复9
  • 已保存回复9
  • 发布时间2021/8/1 09:30
  • 上次更新2023/11/4 12:20:22
查看原帖
为何报错
332914
happybob楼主2021/8/1 09:30
#include <cstdio>
#include <cstring>
#include <iostream>
#include <unordered_map>
using namespace std;

const int N = 1e2 + 5;
char ch[N][N];
int n, m, cnt = 0;

unordered_map<pair<int, int>, bool> mp;
int dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
int dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};

bool find(unordered_map<pair<int, int>, bool>& x)
{
	unordered_map<pair<int, int>, bool>::iterator ite = x.end();
	for (unordered_map<pair<int, int>, bool>::iterator it = x.begin(); it != ite; ++it)
	{
		if (it->second == true) return false;
	}
	return true;
}

void dfs(int x, int y)
{
	if (!(x > 0 && x <= n && y > 0 && y <= m) || ch[x][y] == '.' || mp[pair<int, int>(x, y)] == false)
	{
		return;
	}
	mp[pair<int, int>(x, y)] = false;
	for (int i = 0; i <= 7; i++)
	{
		dfs(x + dx[i], y + dy[i]);
	}
}

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= m; j++)
		{
			cin >> ch[i][j];
			if (ch[i][j] == 'W')
			{
				mp[pair<int, int>(i, j)] = true;
			}
		}
	}
	while (!find(mp))
	{
		dfs((mp.begin()->first).first, (mp.begin()->first).second);
		cnt++;
	}
	cout << cnt << endl;
	return 0;
}
2021/8/1 09:30
加载中...