1. 题目描述:
一个农夫带着一只狼,一只羊和一筐菜,欲从河的左岸坐船到右岸,由于船太小,农夫每次只能带一样东西过河,并且没有农夫看管的话,狼会吃掉羊,羊会吃菜。设计一个方案,使农夫可以无损失的过河
左岸右岸2. 题目分析:
假设人、狼、菜、羊都在河岸a,要到b河岸去。
题中的食物链关系为:
所以,第一次人只能带羊到b河岸;
回到a时,人不能再将刚带过来的羊带回去,所以人是空手回到a的;
a河岸,人有两个选择
选择一:
(1) 带狼到b,人再回到a时,因为不能把狼和羊同时留下,所以只能带走羊;
(2) 再次回到a后,人再到b时,不能把羊和菜同时留下,所以只能带走菜;
(3) 再次回到a时,因为狼和菜可以同时留下,所以优先选择空手过河;到a后发现只剩下羊,所以带羊过河。
选择二:
(1) 带菜到b,人再回到a时,因为不能把菜和羊同时留下,所以只能带走羊;
(2) 再次回到a后,人再到b时,不能把羊和狼同时留下,所以只能带走狼;
(3) 再次回到a时,因为狼和菜可以同时留下,所以优先选择空手过河;到a后发现只剩下羊,所以带羊过河。
解:用四元组S表示状态,即S=(LJMN
          其中L:农夫    J:狼    M:羊    N:菜
           0表示在左岸岸,1表示在右岸,即S=0000
          目标G=(1111
      定义操作符Li)表示农夫带东西到右岸:
                      i=0  农夫自己到右岸;
                                      i=1  农夫带狼到右岸;
                                       i=2  农夫带羊到右岸;
                                       i=3  农夫带菜到右岸;
      定义操作符Ri)表示农夫带东西到左岸:
                      i=0  农夫自己到左岸;
                                        i=1  农夫带狼到左岸;
                                        i=2  农夫带羊到左岸;
                                        i=3  农夫带菜到左岸;
约束状态如下:(1001)狼、羊在左岸;
                          1100)羊、菜在左岸;
                          0110)狼、羊在右岸;
                          0011)羊、菜在右岸;
                          1000)狼、羊、菜在左岸;
                          0111)狼、羊、菜在右岸;