# Water Jug problem using state space and dfs in prolog

I’m solving the water jug problem using state space and dfs,jug 1 have capacity of 4,jug 2 have capacity of 3,show the path to make jug 2 have 2 in it

``````% Water Jug problem using DFS in Prolog

% Define the initial state
start(jug(0,0)).

% Define the goal state
goal(jug(_,2)).

% Define the actions that can be taken
action(fill1, jug(_,Y), jug(4,Y)).
action(fill2, jug(X,_), jug(X,3)).
action(empty1, jug(_,Y), jug(0,Y)).
action(empty2, jug(X,_), jug(X,0)).
action(pour1to2, jug(X,Y), jug(X1,Y1)) :- X > 0, Y < 3, X1 is 0, Y1 is min(3, X + Y).
action(pour2to1, jug(X,Y), jug(X1,Y1)) :- Y > 0, X < 4, Y1 is 0, X1 is min(4, X + Y).

% Define the DFS algorithm
dfs(State, [], _) :- goal(State).

dfs(State, [Action|Actions], Visited) :-
action(Action, State, State1),
State1 \= State,
\+ member(State1, Visited),
dfs(State1, Actions, [State1|Visited]).`

To run the program
start(State), dfs(State, Actions, [State]).
``````

I have tried to print what inside

``````fill1
fill2
empty1
fill1
empty2
pour2to1
fill1
fill2
fill1
empty1
empty2
pour2to1
empty1
pour1to2
empty2
empty
...
false
``````

I can’t figure why it is not working.

change the action pour2to1 and pour1to 2 to

``````action(pour1to2, jug(X,Y), jug(X1,Y1)) :-
X > 0, Y < 3, Y1 is X + Y, X1 is max(0, Y1 - 3).
action(pour2to1, jug(X,Y), jug(X1,Y1)) :-
Y > 0, X < 4, X1 is X + Y, Y1 is max(0, X1 - 4).
``````

because the old code have wrong logic, X1 or Y1 always 0 when pouring to another