赞
踩
要模拟农夫过河问题,首先需要选择一个对问题中每个角色的位置进行描述的方法。一个很方便的办法是用四位二进制数顺序分别表示农夫、狼、白菜和羊的位置。例如用0表示农夫或者某东西在河的南岸,1表示在河的北岸。因此可以列举出16种情景,其中有6种情形是不安全的。从初始状态二进制0000(全部在河的南岸) 出发,寻找一种全部由安全状态构成的状态序列,它以二进制1111(全部到达河的北岸) 为最终目标,并且在序列中的每一个状态都可以从前一状态通过农夫(可以带一样东西)划船过河的动作到达。
实现DFS的前提是建立图或邻接表进行存储。我们选择用邻接表存储,将问题转化成如何建立邻接表的节点并构建相邻节点。邻接表的每个元素表示一个可以安全到达的中间状态。另外还需要一个数据结构记录已被访问过的各个状态,以及已被发现的能够到达当前这个状态的路径。
首先建立结点,包含农夫、狼、羊、白菜四个属性,最初状态均是0。设visited数组对已访问的顶点进行标记(图的遍历)ÿ
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。