【JZOJ1498】抓猫

题目大意:

一个 \(n \times m\) 的地方,每个格子都有方向,问最少要多少个装置从任意一点出发都会碰到装置。

正文:

如果格子连在一起成为一条路的话,其实只用求路的条数就行,考虑用并查集。

代码:

for (int i = 1; i <= n; ++i)
{
	for (int j = 0; j < m; ++j)
	{
		if (a[i][j - 1] == 'E')
			f[Get((i - 1) * m + j + 1)] 
				= Get((i - 1) * m + j);
		if (a[i][j + 1] == 'W')
			f[Get((i - 1) * m + j + 1)] 
				= Get((i - 1) * m + j + 2);
		if (a[i - 1][j] == 'S')
			f[Get((i - 1) * m + j + 1)] 
				= Get((i - 2) * m + j + 1);
		if (a[i + 1][j] == 'N')
			f[Get((i - 1) * m + j + 1)] 
				= Get(i * m + j + 1);
	}
}
for (int i = 1; i <= n * m; i++)
{
	if(f[i] == i)
		ans++;
}
posted @ 2020-02-25 23:52  Jayun  阅读(92)  评论(0编辑  收藏  举报