В общем мне нужно написать жадный алгоритм для задачи о волке , капусте и козе... Вот то, что я уже написал:
-module (tgulab).
-export ([list_max/1]).
-export ([list_min/1]).
-export ([list_append/2]).
-export ([list_length/1]).
-export ([func_fib/1]).
-export ([change_state/2]).
-export ([unsafe_state/1]).
-export ([perms/1]).
-export ([move/2]).
-export ([path/4]).
-export ([get_element/2]).
-export ([go/2]).
%%% переправа волка козы и капусты
% изменение состояния на противоположное
change_state(S1,S2)->
if
S1 == "w" -> S2 = "e", true;
S1 == "e" -> S2 = "w", true;
true-> false
end.
% небезопастные состояния в мире
unsafe_state({X,Y,Y,_})->
change_state(X,Y),
false;
unsafe_state({X,_,Y,Y})->
change_state(X,Y),
false;
unsafe_state(_)->
true.
% определяем перемещения в мире
move({X,X,G,C},{Y,Y,G,C})->
unsafe_state({Y,Y,G,C}),
change_state(X,Y),
io:format("goto Man and Wolf.~n",[]);
move({X,W,X,C},{Y,W,Y,C})->
unsafe_state({Y,W,Y,C}),
change_state(X,Y),
io:format("goto Man and Goat.~n",[]);
move({X,W,G,X},{Y,W,G,Y})->
unsafe_state({Y,W,G,Y}),
change_state(X,Y),
io:format("goto Man and Cabbage.~n",[]);
move({X,W,G,C},{Y,W,G,C})->
unsafe_state({Y,W,G,C}),
change_state(X,Y),
io:format("goto only Man.~n",[]);
move(S,S)->
io:format("return fail.~n",[]);
move(_,_)->
io:format("return error!~n",[]).
perms([]) -> [[]];
perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])].
%построение пути
path(Goal, Goal, _, [Goal])->
% lists:reverse(BeenStack);
ok;
path(State, Goal, Visited, [State|Path])->
move(State,NextState),
not lists:member(NextState,Visited),
path(NextState,Goal, [NextState|Visited], Path).
% начинаем поиск
go(Start, Goal)->
path(Start, Goal,[],[Start]).
/// желательно, чтобы это был поиск с помощью жадного алгоритма...
1) состояния системы описаны
2) нужно дописать сам поиск
3)) тут у меня как раз и возникли проблемы
4))) заранее -- спасибо
