Missionaries & Cannibals Problem Apr 10, 2006 • Rohit Prolog solve :- StartingState = [1,3,3,0,0], depth_first_search([],StartingState,Solution), write(Solution), nl. depth_first_search(CurrentPath,CurrentState,Solution) :- CurrentState=[-1,0,0,3,3], Solution=[CurrentState|CurrentPath]. depth_first_search(CurrentPath,CurrentState,Solution) :- successor(CurrentState,NewState), not(member(NewState,CurrentPath)), depth_first_search([CurrentState|CurrentPath],NewState,Solution). successor([Side,LM,LC,RM,RC],[NewSide,NewLM,LC,NewRM,RC]) :- NewLM is LM-1*Side, NewRM is RM+1*Side, NewSide is (-1)*Side, test(NewLM,LC,NewRM,RC). successor([Side,LM,LC,RM,RC],[NewSide,NewLM,LC,NewRM,RC]) :- NewLM is LM-2*Side, NewRM is RM+2*Side, NewSide is (-1)*Side, test(NewLM,LC,NewRM,RC). successor([Side,LM,LC,RM,RC],[NewSide,LM,NewLC,RM,NewRC]) :- NewLC is LC-2*Side, NewRC is RC+2*Side, NewSide is (-1)*Side, test(LM,NewLC,RM,NewRC). successor([Side,LM,LC,RM,RC],[NewSide,LM,NewLC,RM,NewRC]) :- NewLC is LC-1*Side, NewRC is RC+1*Side, NewSide is (-1)*Side, test(LM,NewLC,RM,NewRC). successor([Side,LM,LC,RM,RC],[NewSide,NewLM,NewLC,NewRM,NewRC]) :- NewLC is LC-1*Side, NewRC is RC+1*Side, NewLM is LM-1*Side, NewRM is RM+1*Side, NewSide is (-1)*Side, test(NewLM,NewLC,NewRM,NewRC). test(LeftMissionaries,LeftCannibals,RightMissionaries,RightCannibals) :- LeftMissionaries>=0, LeftCannibals>=0, RightMissionaries>=0, RightCannibals>=0, LeftMissionaries>=LeftCannibals, RightMissionaries>=RightCannibals. test(LeftMissionaries,LeftCannibals,RightMissionaries,RightCannibals) :- LeftMissionaries>=0, LeftCannibals>=0, RightMissionaries>=0, RightCannibals>=0, LeftMissionaries>=LeftCannibals, RightMissionaries=0. test(LeftMissionaries,LeftCannibals,RightMissionaries,RightCannibals) :- LeftMissionaries>=0, LeftCannibals>=0, RightMissionaries>=0, RightCannibals>=0, LeftMissionaries=0, RightMissionaries>=RightCannibals. Add reply Click here to reply to the blog post instead Send