Solve The Maze

题目链接

https://codeforces.ml/contest/1365/problem/D

题意:

比如输入3 * 3
3 3
#B.
#…
GG.
. 代表路可以走
B 代表这是坏人
G 代表这是好人
#代表此路不通

你可以把非 #的地方全变成#
判断能否让所有的好人都到最右下角的点,所有的坏人都不能到右下角的点(当然可以把最右下角的点也堵上,那么久所有人都出不去)

思路

很容易想到,我们必做的事情是
在最右下角的点进行dfs,判断能到达哪些点
但最难的部分就是怎么通过深搜将好人放出,坏人堵住?

其实很简单,就是我们初始的时候我们就将坏人直接围住就行了,很容易想,假如坏人附件四格之内有好人,那他们两个肯定就是狂绑在一起的,其他情况的话,我们也可以大胆猜测是不影响好人前进的。

那么我们只要将坏人全部堵住,对右下角进行依次深搜,计算能遍历到的好人个数和前面统计的是否一样,加入一样就满足,不一样就不满足,代码就补贴了,比较简单

你可能感兴趣的:(编程)