【Luogu P2771】【USACO16JAN】Build Gates S

开一个很大的将近3000*3000的数组,去作为地图使用。

然后把起点放到一个比较中间的位置,因为Farmer John会向四个方向走。

之后O(n)扫一遍,对于每一个指令去模拟他走的过程。

最重要的是判断交点,以此来确定联通块的个数。

需要注意的问题:一个点可能在不同的方向意义上算作不同的交点。

简单来说,就是这个点是可以从其上下左右四个点走来的,那么如果从不同的点走到这个点,就有可能形成不同的联通块。

所以怎么做?

记录走到的每个点是由哪一个方向走来的就行。

开一个三维的桶:cz[x][y][z]=1表示x,y这个点已经由z方向延伸过。

那么每次找到交点就只需要判断该方向上这个点有没有来过就可以了。

还有一个需要注意的问题,就是如何标记方向

首先,我们如果是从A点走到B点,那么B点的A到B这个方向就要被标记。

同时,从A到B实际上是等效于从B到A的,所以我们也要标记A点的B到A的方向。

-------------------以上内容摘抄于https://87942.blog.luogu.org/jian-men(有删改、划重点)-----------------------------

以下内容为本人添加

注意:对于当前走到(x,y),方向为z,判断同方向是否来过即可,不要判断反方向。如图:

“标记A点的B到A的方向”:

 

posted @ 2020-08-06 18:53  蒟蒻魔芋汤  阅读(146)  评论(0编辑  收藏  举报