这应该是我做过的较为复杂的搜索题了!
首先,对输入的数据进行处理,记录下每个门的位置,以及每个门各需要多少钥匙才能打开!
于是钥匙数据有两个变量:对应的门的钥匙数量,目前拿到的钥匙的数量(当这两个变量相等的时候,才可将对应的门打开!)
门的数组有有三个变量,x,y,open。x和y是记录该门的位置,而open则是判断是否在搜索的过程中到达这个门。
只有当open==true,还有钥匙的数量等于目前那道该种钥匙的数量时,该门才能作为新的起点进行新一轮的遍历!
切记,门是走不过去的,也就是遇到门的时候要将其标记为普通点,否则下次将该点作为起点进行遍历的时候会重复走。接着就returne 0.这个问题导致了2次TLE。
而钥匙的点作为普通的点就行了。
为了方便处理,将起点作为第五个门,呵呵,的确是方便了很多!
当门数组从头到位走一次,都没发现可以作为新起点的门的时候,说明此迷宫是拿不到宝藏的,输出NO。
That 's all!
其实代码并不长,只是判断语句太多了!