问题不再赘述。
四个的状态都各有两种,实质上是求【0 0 0 0】到【1 1 1 1】的最短路径。
以现在的理解,广搜就是要将起点到终点的所有路径一一枚举,从而找到最优解。队列是完美契合广搜的数据结构,将初始节点入队,然后将此节点能到达的所有符合要求且不重复的状态入队,然后初始节点出队,直到找到末节点或者队列为空(无解)。
具体实施:首先判断与农夫在同侧的,【STATUS】(STATUS表示此时状态)&【1 0 0 0】(判断向量)即可得到农夫的位置(bool0或1),同理得到其他的位置,循环判断,如果位于同侧(bool相当)且满足食物链关系,且新STATUS没有加入过队列,则加入。新STATUS用原STATUS和 循环条件中的两个判断向量的或运算 做异或运算(目的是改变这两个位状态且让其他状态不变)。(用于判断某个状态是否在队列中的数组,在进入队列后值变为上个状态)直到队列空或者找到【1 1 1 1】