本文由抱雪(hugsnow)原创,转载请注明来源 http://www.luoxf.net/
方法很简单
方法一:
1、如果小桶空,从大桶到小桶
2、如果中桶满,从中桶到大桶
3、如果中桶空间能容纳小桶内的,把小桶全倒中桶
4、从小桶倒,把中桶倒满
方法二:完全类似,不过到油的方向为 大桶–>中桶–>小桶
1 dao(X,X,0):-!.
2 % 倒法1:从大桶往小桶倒,小桶往中桶到
3 % 3号桶空时从1号往3号桶倒
4 dao(X,Y,0):-
5 tong(_,_,C),
6 X1 is X-C,
7 Z = C,
8 write(‘从第一个桶倒’-Z-‘到第三个桶,’),
9 write(‘现在三个桶的状态’-X1-Y-Z),
10 nl,
11 dao(X1,Y,Z).
12 % 2号桶满时从2号往1号桶倒
13 dao(X,Y,Z):-
14 tong(_,B,_),
15 Y=B,
16 X1 is X+Y,
17 write(‘从第二个桶倒’-Y-‘到第一个桶,’),
18 write(‘现在三个桶的状态’-X1-0-Z),
19 nl,
20 dao(X1,0,Z).
21 % 2号桶空余超过3号时从3号往2号桶倒完
22 dao(X,Y,Z):-
23 tong(_,B,_),
24 M is B-Y,
25 Z>0,
26 M>=Z,
27 Y1 is Y+Z,
28 write(‘从第三个桶倒’-Z-‘到第二个桶,’),
29 write(‘现在三个桶的状态’-X-Y1-0),
30 nl,
31 dao(X,Y1,0).
32 % 2号桶空余不足3号时从3号往2号桶倒部分
33 dao(X,Y,Z):-
34 tong(_,B,C),
35 M is B-Y,
36 Z=C,
37 M<Z,
38 M>0,
39 Z1 is Z-M,
40 write(‘从第三个桶倒’-M-‘到第二个桶,’),
41 write(‘现在三个桶的状态’-X-B-Z1),
42 nl,
43 dao(X,B,Z1).
44 :-assert(tong(12,7,5)),dao(12,0,0).
猎人过河 »