问题描述
一个农夫带着一只狼,一棵白菜和一只山羊要从一条河的南岸到北岸,农夫每次只能带一样东西过过河,但是任意时刻如果农夫不在场时,狼要吃羊、羊要吃菜,请为农夫设计过河方案。
分析:
要求解农夫过河问题,首先要选择一个对问题中每个角色的位置进行描述的方法。用四位二进制数顺序表表示农夫、狼、白菜和羊的位置。用1表示在南岸,0表示在北岸。共有0000~1111中状态,以每一种状态为图的一个顶点,判断状态中可行的点。
根据可能出现的情况创建无向图,农夫的运动状态建立邻接矩阵,确定起始状态顶点为状态0000,终结状态顶点为1111,即开始时农夫、狼、羊和白菜都在北岸,顶点状态为0000,运用递归调用深度优先遍历图,从开始状态顶点到结束状态顶点遍历,输出过河情况。
图解
部分代码分析:
以农夫,狼,羊和白菜安全的情况为顶点创建无向图。
void Graph()
{
for(int i=0;i
for(int j=0;j
fwsc[i][j]=0;
for(int farmer=0;farmer<=1;farmer++)
{
for(int wolf&#