CPSC 322 - Lecture 14 - October 8, 2004

CPSC 322 - Lecture 14

8-Tile Puzzle Search



/* tiny 8-puzzle example */

neighbors([2,8,3,1,0,4,7,6,5],[[2,8,3,0,1,4,7,6,5],[2,0,3,1,8,4,7,6,5],[2,8,3,1,4,0,7,6,5]]).
neighbors([2,8,3,0,1,4,7,6,5],[[0,8,3,2,1,4,7,6,5],[2,8,3,7,1,4,0,6,5]]).
neighbors([2,0,3,1,8,4,7,6,5],[[0,2,3,1,8,4,7,6,5],[2,3,0,1,8,4,7,6,5]]).
neighbors([2,8,3,1,4,0,7,6,5],[[2,8,0,1,4,3,7,6,5],[2,8,3,1,4,5,7,6,0]]).
neighbors([0,8,3,2,1,4,7,6,5],[[8,0,3,2,1,4,7,6,5]]).
neighbors([2,8,3,7,1,4,0,6,5],[[2,8,3,7,1,4,6,0,5]]).
neighbors([0,2,3,1,8,4,7,6,5],[[1,2,3,0,8,4,7,6,5]]).
neighbors([2,3,0,1,8,4,7,6,5],[[2,3,4,1,8,0,7,6,5]]).
neighbors([2,8,0,1,4,3,7,6,5],[[2,0,8,1,4,3,7,6,5]]).
neighbors([2,8,3,1,4,5,7,6,0],[[2,8,3,1,4,5,7,0,6]]).

neighbors([8,0,3,2,1,4,7,6,5],[[8,3,0,2,1,4,7,6,5],[8,1,3,2,0,4,7,6,5]]).
neighbors([2,8,3,7,1,4,6,0,5],[[2,8,3,7,0,4,6,1,5],[2,8,3,7,1,4,6,5,0]]).
neighbors([1,2,3,0,8,4,7,6,5],[[1,2,3,8,0,4,7,6,5],[1,2,3,7,8,4,0,6,5]]).
neighbors([2,3,4,1,8,0,7,6,5],[[2,3,4,1,0,8,7,6,5],[2,3,4,1,8,5,7,6,0]]).
neighbors([2,0,8,1,4,3,7,6,5],[[0,2,8,1,4,3,7,6,5],[2,4,8,1,0,3,7,6,5]]).
neighbors([2,8,3,1,4,5,7,0,6],[[2,8,3,1,4,5,0,7,6],[2,8,3,1,0,5,7,4,6]]).

neighbors([8,3,0,2,1,4,7,6,5],[]).
neighbors([8,1,3,2,0,4,7,6,5],[]).
neighbors([2,8,3,7,0,4,6,1,5],[]).
neighbors([2,8,3,7,1,4,6,5,0],[]).
neighbors([1,2,3,8,0,4,7,6,5],[]).
neighbors([1,2,3,7,8,4,0,6,5],[]).
neighbors([2,3,4,1,0,8,7,6,5],[]).
neighbors([2,3,4,1,8,5,7,6,0],[]).
neighbors([0,2,8,1,4,3,7,6,5],[]).
neighbors([2,4,8,1,0,3,7,6,5],[]).
neighbors([2,8,3,1,4,5,0,7,6],[]).
neighbors([2,8,3,1,0,5,7,4,6],[]).


append([],Z,Z).
append([A|X],Y,[A|Z]) <- append(X,Y,Z).

is_goal([1,2,3,8,0,4,7,6,5]). 

search(F0) <- choose(Node,F0,F1) & 
              neighbors(Node,NN) &
              add_to_frontier(NN,F1,F2) &
              search(F2).

search(F0) <- choose(Node,F0,F1) & is_goal(Node).

choose(N,[N|Flist],Flist). 

/* adding Nodelist to the back of Flist1 results in breadth-first search */
add_to_frontier(Nodelist,Flist1,Flist2) <- append(Flist1,Nodelist,Flist2).

Last revised: October 31, 2004